我的数据库表是::
attendence date admission number attendence
2013-10-2 LSTM-0008/2013-2014 present
2013-10-19 LSTM-0008/2013-2014 absent
2013-10-20 LSTM-0008/2013-2014 present
上面一个是我的数据库表。
我想在这里显示这样的表 totalworkingdays 是基于数据库表的那个月的存在和缺席总数:
MonthName totalWorkingDays Present absent
october 3 2 1
我这样写 mysql 查询:
select distinct
monthname(attendencedate) as monthname,
count(*) as totalworkingdays
from lstms_attendence where
attendencedate> '2013-10-01' and attendencedate<'2013-10-31'
and addmissionno='LSTM-0008/2013-2014'
GROUP BY
monthname(attendencedate),
sum(CASE WHEN attendence = 'present' THEN 1 ELSE 0 END) as present,
SUM(CASE WHEN attendence = 'absent' THEN 1 ELSE 0 END) AS absent
FROM lstms_attendence
WHERE addmissionno = 'LSTM-0008/2013-2014'
GROUP BY monthname(attendencedate);
我得到了这样的错误::
错误代码:1064 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行使用 near 'as present,SUM(CASE WHEN attendence = 'absent' THEN 1 ELSE 0 END) AS absent FRO' 的正确语法 (用了 0 毫秒)
任何人都给我建议。提前致谢。
最佳答案
请记住始终以更易读的方式放置查询。
滚动的需要令人厌恶。
有点乱
几个 FROM 和 GROUP BY 子句...
应该看起来更像
SELECT DISTINCT
monthname(attendencedate) as monthname,
count(*) as totalworkingdays,
sum(CASE WHEN attendence = 'present' THEN 1 ELSE 0 END) as present,
SUM(CASE WHEN attendence = 'absent' THEN 1 ELSE 0 END) AS absent
FROM lstms_attendence
WHERE
attendencedate> '2013-10-01' and attendencedate<'2013-10-31'
and addmissionno='LSTM-0008/2013-2014'
GROUP BY
monthname(attendencedate)
AFAIR 你不能将 AS
放在 GROUP BY 子句中。这就是 MySQL 告诉你的。
附言。未测试
关于java - 如何编写Mysql查询以根据日期从数据库中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015627/