我有这张桌子

  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至少具有一个带有红色typecolor

我想为每个idDevice一个具有type红色(不是唯一)的color,并使用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

最佳答案

您不需要CASE为此,只需WHERE

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

关于mysql - MySQL:按条件分组和aggregate_function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40775720/

10-15 21:05