我这样查询:
SELECT DISTINCT TahunMasuk (SELECT COUNT(LamaStudi)
FROM studi WHERE LamaStudi < 2) from studi order by TahunMasuk
但是,查询是错误的。我可以做些什么来解决该查询,以便根据LamaStudi
计算TahunMasuk
?结果示例就像这样
这是我的桌子 的 Studi住宅
提前致谢
答案 0 :(得分:1)
此查询应返回您想要的结果:
SELECT TahunMasuk,
COUNT(CASE WHEN LamaStudi < 2 THEN 1 END) AS `LamaStudi < 2`,
COUNT(CASE WHEN LamaStudi BETWEEN 2 AND 2.4 THEN 1 END) AS `LamaStudi < 2-2.4`,
COUNT(CASE WHEN LamaStudi > 2.4 THEN 1 END) AS `LamaStudi > 2.4`,
FROM studi
GROUP BY TahunMasuk;
在您的示例数据中,您有一些LamaStudi为NULL的行,但是您不清楚如何处理它。如果你想将NULL计为零,那么你需要这个小修改:
COUNT(CASE WHEN COALESCE(LamaStudi,0) < 2 THEN 1 END) AS `LamaStudi < 2`,
您错误地使用了DISTINCT。 DISTINCT选项适用于选择列表中的所有列。 以下行都是不同的行:
a b c
a b d
a e d
如果任何列与其他行不同,则DISTINCT会在结果中保留一行。
如果要将结果集缩减为一个列中具有不同值的行,请使用GROUP BY。
答案 1 :(得分:0)
您可以使用GROUP BY
:
SELECT TahunMasuk, COUNT(*)
FROM studi
GROUP BY TahunMasuk