2016-11-23 71 views
0

的aggregate_function我有这个表MySQL的:GROUP BY和与条件

id | idDevice | type | color 
    ----------------------------- 
    1 | 1  | a | red 
    2 | 1  | b | green 
    3 | 1  | c | red 
    4 | 2  | a | blue 
    5 | 2  | b | red 

每个idDevice有红色color至少一个type

我想获得每个idDevice一个typecolor红色与GROUP(那不是唯一的)BY语句是这样的:

SELECT idDevice, 
    CASE WHEN color = red THEN type END as redType 
FROM table 
GROUP BY idDevice 

不幸的是,上述方法无效,因为它有时会返回一个即使存在红色的类型,也是NULL redType。是否有可能通过GROUP BY语句获得正确的redType?

我要寻找这样的:

idDevice | redType 
    ----------------------------- 
    1  | a  
    2  | b  

或这个结果:

idDevice | redType 
    ----------------------------- 
    1  | c  
    2  | b  
+0

为什么使用MAX()函数 – Strawberry

回答

0

你不需要CASE对于这一点,只是WHERE

SELECT idDevice, MAX(type) AS redType 
FROM table 
WHERE color = 'red' 
GROUP BY idDevice 
+0

。 – Man

+0

您需要使用一些选择选择哪种类型的组中,我不明白“或”在这种情况下 – Barmar