2017-01-23 45 views
-1

我遇到了一個問題,試圖爲每個用戶提供一個動作,使其具有最低優先級,優先級基於其他列的內容並且是一個整數,獲取最小值的行的ID,由另一列組

這是初始的查詢:

SELECT 
    CASE 
     ... 
    END AS dummy_priority, 
    id, 
    user_id 
FROM 
    actions 

結果:

id user_id  priority 
1 2345  1 
2 2345  3 
3 2999  5 
4 2999  2 
5 3000  10 

期望的結果:

id user_id  priority 
1 2345  1 
4 2999  2 
5 3000  10 

繼我想要什麼,我試圖

SELECT x.id, x.user_id, MIN(x.priority) 
FROM (
    SELECT 
     CASE 
      ... 
     END AS priority, 
     id, 
     user_id 
    FROM 
     actions 
) x 
GROUP BY x.user_id 

沒有工作

錯誤代碼:SELECT列表1055表達式#1是不是在GROUP BY子句 幷包含非聚集列'x.id',它不是 ,它在功能上依賴於GROUP BY子句中的列;

這其中大部分我發現了僅僅抽取USER_ID和優先級,然後做一個內部聯接與他們兩個讓行,但我不能這樣做的例子,自(優先級,USER_ID)是不是獨特

一個簡單核查的例子是

CREATE TABLE `actions` (
    `id` int(11) NOT NULL, 
    `user_id` int(11) DEFAULT NULL, 
    `priority` int(11) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `actions` (`id`, `user_id`, `priority`) VALUES 
(1, 2345, 1), 
(2, 2345, 3), 
(3, 2999, 5), 
(4, 2999, 2), 
(5, 3000, 10); 

如何提取所需的結果(請記住認爲,這表是一個子查詢)?

+0

就像試圖賣棒棒棒糖 – Strawberry

+0

你是什麼意思?缺乏信息嗎? – Tarik

+0

是的。見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

回答

1

這樣做的正確方法將涉及某種子查詢。 。 。這將需要重複case的定義。

這裏是另一種方法,使用substring_index()/group_concat()招:

SELECT SUBSTRING_INDEX(GROUP_CONCAT(x.id ORDER BY x.priority), ',', 1) as id, 
     x.user_id, MIN(x.priority) 
FROM (SELECT (CASE ... 
       END) AS priority, 
      id, user_id 
     FROM actions a 
    ) x 
GROUP BY x.user_id; 
0

,足額,適當的方式......

SELECT x... 
    , CASE...x... priority 
    FROM my_table x 
    JOIN 
    (SELECT user_id 
      , MIN(CASE...) priority 
     FROM my_table 
     GROUP 
      BY user_id 
    ) y 
    ON y.user_id = x.user_id 
    AND y.priority = CASE...x...; 
0

這應該工作...

SELECT id , user_id, priority FROM actions act 
INNER JOIN 
(SELECT 
     user_id, MIN(priority) AS priority 
    FROM 
     actions 
GROUP BY user_id) pri 
ON act.user_id = pri.user_id AND act.priority = pri.prority 
相關問題