我有以下问题
SELECT CASE u.situacionUsuario
WHEN "A" THEN 'ALTA'
WHEN "R" THEN 'ALTA'
WHEN "S" THEN 'ALTA'
WHEN "B" THEN 'BAJA'
WHEN "T" THEN 'BAJA'
ELSE NULL
END AS Situacion
FROM Usuario u
WHERE
YEAR(u.fechaAsistencia)=2018 AND MONTH(u.fechaAsistencia) BETWEEN 01 AND 12
GROUP BY u.situacionUsuario, u.usuario;
返回这个结果
-Situacion-
|ALTA |
|ALTA |
|ALTA |
|ALTA |
|ALTA |
|ALTA |
|BAJA |
|BAJA |
|ALTA |
|ALTA |
|ALTA |
|BAJA |
|ALTA |
|ALTA |
|ALTA |
----------
我想要的结果就是这个。
-Situacion-TOTAL-|
|ALTA |12 |
|BAJA |3 |
-----------------
我用了count,但它没有返回我想要的结果
SELECT CASE u.situacionUsuario
WHEN "A" THEN 'ALTA'
WHEN "R" THEN 'ALTA'
WHEN "S" THEN 'ALTA'
WHEN "B" THEN 'BAJA'
WHEN "T" THEN 'BAJA'
ELSE NULL
END AS Situacion,
COUNT (CASE u.situacionUsuario
WHEN "A" THEN 'ALTA'
WHEN "R" THEN 'ALTA'
WHEN "S" THEN 'ALTA'
WHEN "B" THEN 'BAJA'
WHEN "T" THEN 'BAJA'
ELSE NULL
END) AS Total
FROM Usuario u
WHERE
YEAR(u.fechaAsistencia)=2018 AND MONTH(u.fechaAsistencia) BETWEEN 01 AND 12
GROUP BY Situacion;
有没有什么建议,我怎样才能和案件一起计算,并得到预期的结果?
3条答案
按热度按时间iqjalb3h1#
尝试嵌入式选择,
7gyucuyw2#
做那件事
CASE
派生表中的部分。GROUP BY
其结果:wf82jlnq3#
我会这样写:
笔记:
字符串应该用单引号分隔。例如,如果
Usuario
有任何列被命名为A
或者R
等等。在中使用直接日期比较,而不是日期函数
WHERE
条款,如果可能的话。这改进了优化。mysql在
GROUP BY
.我不知道你为什么要
0
如果行是NULL
,所以这只是使用COUNT(*)
总的来说。ELSE NULL
是多余的。我不认为这会增加任何疑问。我其实可以简化为:
这降低了查询中的tpo导致意外结果的可能性。