我有一张下表,
-----------------------------------
| subject | ID | date | status |
+---------+----+--------+---------+
| S1997 |153 |25/4/19 | Late |
| S1997 |154 |25/4/19 | Present |
| S1997 |153 |26/4/19 | Present |
| S1997 |154 |26/4/19 | Present |
| S1999 |153 |27/4/19 | Present |
| S1999 |154 |27/4/19 | Late |
-----------------------------------
如何编写查询以获取如下结果
----------------------------------------
| subject | ID | total attendance| late|
+---------+----+-----------------+------
| S1997 |153 | 2 | 1 |
| S1997 |154 | 2 | 0 |
| S1999 |153 | 1 | 0 |
| S1999 |154 | 1 | 1 |
----------------------------------------
我尝试使用GROUP BY,但无法获得上面想要的表格。
答案 0 :(得分:1)
使用分组依据和汇总
select subject, id, count(date) as totalattendance,
count(case when status='late' then 1 end) as late
from tablename
group by subject, id
答案 1 :(得分:0)
@ fa06给出的答案略有不同:
SELECT
subject,
id,
COUNT(*) AS `total attendance`,
SUM(status = 'late') AS late
FROM yourTable
GROUP BY
subject,
id;
我们可以利用MySQL的条件SUM
函数来避免使用CASE
表达式。
答案 2 :(得分:0)
您可以使用COUNT
,SUM
和GROUP BY
SELECT subject,ID,COUNT(*) AS `total attendance`,SUM(IF(status = 'Late', 1, 0))
AS late
FROM `tablename`
GROUP BY subject,ID