mysql - 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.
但它只显示一个字段。
解决方案
你可以使用subquery
并join
做到这一点
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
推荐阅读
- javascript - 仅在存在时才呈现对象属性值
- javascript - 将鼠标悬停在单独的 div 上时使用 Javascript 更改跨度的文本颜色
- java - JAVA:如何使用 Scanner 读取 CLI 字符串和数字
- javascript - 使用随机系统更改消息 (Discord.js)
- oracle - Oracle apex 如何知道哪个项目引发“离开站点”弹出窗口
- android - Google Play 商店没有要求我创建上传密钥库……我还需要创建一个吗?
- linux - 我怎样才能让这个终端“at”命令正常工作?
- python - WebDriverException:未知错误:尝试启动 Chrome 浏览器时 DevToolsActivePort 文件不存在 (1)
- javascript - 无法读取更新并保存到对象 csv 数据 typescript/js
- python - 使用 groupby pandas 过滤和排序列