首页 > 解决方案 > mysql GROUP BY 显示所有对应字段

问题描述

我的表如下:

ID      EMP_ID      NAME        ACTIVITY_DATE       ACTIVITY_CODE

1       EMP01      ROCKY        2018-02-19          AC04  
2       EMP02      SMITH        2018-02-19          AC09
3       EMP02      SMITH        2018-02-19          AC10
4       EMP01      ROCKY        2018-02-20          AC04
5       EMP01      ROCKY        2018-02-20          AC04
6       EMP03      RICKY        2018-02-22          AC05
7       EMP03      RICKY        2018-02-22          AC07
8       EMP02      SMITH        2018-02-22          AC09

我想从查询结果中消除重复的日期,并按 ID 顺序显示所有相应的字段,我的表应该是这样的:

ID      EMP_ID      NAME        ACTIVITY_DATE    ACTIVITY_CODE     COUNT

1       EMP01      ROCKY        2018-02-19          AC04            3
4       EMP01      ROCKY        2018-02-20          AC04            2
6       EMP03      RICKY        2018-02-22          AC05            3

我试过这个查询:

SELECT ID, EMP_ID, NAME, ACTIVITY_DATE, ACTIVITY_CODE 
FROM emp_entries
GROUP BY ID, EMP_ID, NAME, ACTIVITY_DATE, ACTIVITY_CODE

但它并没有消除重复的条目。

只有当我这样做时它才有效:

SELECT COUNT(ACTIVITY_DATE), ACTIVITY_DATE 
FROM emp_entries
GROUP BY ACTIVITY_DATE. 

但它只显示一个字段。

标签: mysql

解决方案


你可以使用subqueryjoin做到这一点

   SELECT e1.id,e1.EMP_ID,e1.NAME,e1.ACTIVITY_DATE ,e1.ACTIVITY_CODE,e2.cnt 
    FROM emp_entries e1
    JOIN(
        SELECT COUNT(ACTIVITY_DATE) as cnt,MIN(id) AS mId
        FROM emp_entries
        GROUP BY ACTIVITY_DATE) e2 
    ON e2.mId=e1.id

推荐阅读