PHP mysql查询按两列分组并计数

时间:2019-04-22 05:23:04

标签: php mysql

我有一张下表,

-----------------------------------
| 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,但无法获得上面想要的表格。

3 个答案:

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

您可以使用COUNTSUMGROUP BY

获得所需的结果。
SELECT subject,ID,COUNT(*) AS `total attendance`,SUM(IF(status = 'Late', 1, 0)) 
AS late 
FROM `tablename` 
GROUP BY subject,ID
相关问题