2016-11-23 5 views
0

У меня есть эта таблицаMySQL: Группа по aggregate_function и с условием

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 имеет по крайней мере один type с красным color.

Я хотел бы получить для каждого idDevice один type, который имеет color красный (это еще не уникальные) с GROUP BY заявление, как это:

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

К сожалению, выше не работает, потому что иногда возвращает NULL redType, хотя существует тип с красным цветом. Можно ли получить правильный redType с помощью оператора GROUP BY?

Я ищу это:

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

или этот результат:

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

Я не понимаю «или» в этом контексте – Strawberry

ответ

0

вам не нужно CASE для этого, просто WHERE.

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

почему использование макс() функция – Man

+0

Вам нужно использовать что-то, чтобы выбрать, какой тип в группе, чтобы выбрать. – Barmar

Смежные вопросы