如何正确使用SELECT DISTINCT?

时间:2017-03-18 22:52:21

标签: mysql sql

我这样查询:

SELECT DISTINCT TahunMasuk (SELECT COUNT(LamaStudi) 
FROM studi WHERE LamaStudi < 2) from studi order by TahunMasuk

但是,查询是错误的。我可以做些什么来解决该查询,以便根据LamaStudi计算TahunMasuk?结果示例就像这样

enter image description here

这是我的桌子 的 Studi住宅

enter image description here

提前致谢

2 个答案:

答案 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