想象一个只有 2 列的 MySQL 表:一个 id 和一个颜色名称。
通过这个查询,我知道每种颜色有多少个 id:
SELECT color_name, count(id) FROM color_table GROUP BY (color_name)
red: 10
blue: 5
yellow: 3
green: 1
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法可以指定“分组依据”一些自定义组?我的意思是,是否有一个查询会导致以下结果:
red: 10
colors different than red: 9
Run Code Online (Sandbox Code Playgroud)
不确定 MYSQL,但您可以在 SQL Server 的 Group BY 中使用 CASE。
SELECT CASE color_name
WHEN 'red' THEN 'red'
ELSE 'colors different than red'
END AS color_group
,Count(id)
FROM color_table
GROUP BY CASE color_name
WHEN 'red' THEN 'red'
ELSE 'colors different than red'
END
Run Code Online (Sandbox Code Playgroud)
直接用GROUP BY
,不行。不过,您仍然可以获得您想要的结果,并且有很多方法可以实现它。例如UNION
:
SELECT 'red', COUNT(*) FROM color_table WHERE color_name='red'
UNION
SELECT 'colors different than red', COUNT(*) FROM color_table WHERE color_name <> 'red'
Run Code Online (Sandbox Code Playgroud)