我有一个车辆数据库,想统计多少辆汽车具有特定颜色。
但是我不知道有多少种颜色,还有很多组合。 因此,这段代码对我没有帮助:
SELECT
SUM(CASE WHEN colour='red' THEN 1 ELSE 0 END) red,
SUM(CASE WHEN colour='green' THEN 1 ELSE 0 END) green
(etc)
FROM vehicles
要获得所有颜色,我可以这样做:
select distinct colour from vehicles
但是如何在上面的sql语句中使用该信息? 我正在使用MS sql服务器。
答案 0 :(得分:4)
您可以将结果集放在行而不是列中:
SELECT colour, count(*)
FROM vehicles
GROUP BY colour;
另一种选择是,您将需要使用动态SQL或将结果集表示为XML或JSON。
答案 1 :(得分:2)
为什么不简单地进行汇总?
select colour, count(*) as no_vehicles
from vehicles v
group by colour;
答案 2 :(得分:0)
这将拉出载具中所有颜色的列表:
SELECT distinct colour
from vehicles
但是您真正想要使用的是group by子句,如下所示:
SELECT
colours
,count(*) HowMany
from vehicles
group by
colours
这将为列colours
中的每个不同值产生一行。它不会解析颜色组合; “带有黑色镶边的红色”将在其自己的列中显示,而不是红色为+1,黑色不是_1-这将是一个更为复杂的问题。