SQL CASE,当列类别= x按类别分组时,不要分组

时间:2016-05-19 11:33:08

标签: mysql sql case

我有这张桌子:

date           client        category
-------------------------------------
2016-05-20     harrys        bar
2016-05-20     pitchers      bar
2016-05-20     eagle         sport
2016-05-21     claire        other
2016-05-21     maximus       other
2016-05-24     eagle         sport
2016-05-24     dolphin       sport

现在的结果是:

date           client        category
-------------------------------------
2016-05-20     harrys        bar       (two rows)
2016-05-20     eagle         sport
2016-05-21     claire        other     (two rows)
2016-05-24     eagle         sport     (two rows)

因为我将列类别分组,但我希望结果为:

date           client        category
-------------------------------------
2016-05-20     harrys        bar       (two rows)
2016-05-20     eagle         sport
2016-05-21     claire        other
2016-05-21     maximus       other
2016-05-24     eagle         sport
2016-05-24     dolphin       sport

所以当日期和类别'bar'匹配时,我希望它们分组。但是,当日期匹配时,我不希望类别“运动”或“其他”分组。

我试过锁定CASE-WHEN-THEN-ELSE等等。但我只是不知道如何编写sql语句。

我试过像

这样的东西
SELECT *
FROM events
GROUP BY
CASE
    WHEN category = "bar" THEN category ELSE ""
END

给我:

date           client        category
-------------------------------------
2016-05-20     harrys        bar
2016-05-20     eagle         sport

我也试过

WHEN category = "bar" THEN date, category ELSE ""

但它根本不起作用..

你可以看到我不知道如何使用CASE ...所以有任何建议吗?

我试图在stackoverflow上阅读这么多问题,还有SQL语句的手册等等。我只是不明白如何使用它。

1 个答案:

答案 0 :(得分:6)

您可以使用UNION ALL

SELECT category, date, client
FROM events
WHERE category <> 'bar'
UNION ALL
SELECT category, date, MIN(client) AS client
FROM events
WHERE category = 'bar'
GROUP BY category, date;

LiveDemo