mysql - 如何加入两个都有 COUNT 和分组的查询而不头疼?
问题描述
我一直在尝试将两个查询的结果合并到一张表中,以计算它们并以小时为单位进行排序。
我试过SELECT
and UNION ALL
,但没有运气。我搜索了所有 StackOverflow 和谷歌,但一直在头疼。如果我运行我的查询单 - 一切都很好,我得到我的输出。
查询一:
SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours
FROM unknownCheckin
WHERE timestamp > '2019-03-01 23' and eid = '222'
GROUP BY hours
order by timestamp ASC
查询 2:
SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours
FROM checkin
WHERE timestamp > '2019-03-01 23' and eid = '222'
GROUP BY hours
order by timestamp ASC
我的实验是:
SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours FROM unknownCheckin
INNER JOIN checkin
ON unknownCheckin.eid = checkin.eid
WHERE timestamp > '2019-03-01 23' and eid = '222'
GROUP BY hours order by timestamp ASC
1052 - 字段列表中的列“时间戳”不明确
运行单个查询 1 时的预期结果:
--------------------------------------------------
| peopleCount | hours |
--------------------------------------------------
| 4 | 21 |
--------------------------------------------------
| 1 | 22 |
--------------------------------------------------
| 1 | 00 |
--------------------------------------------------
查询 2:
--------------------------------------------------
| peopleCount | hours |
--------------------------------------------------
| 10 | 22 |
--------------------------------------------------
| 22 | 23 |
--------------------------------------------------
| 12 | 00 |
--------------------------------------------------
| 5 | 01 |
--------------------------------------------------
我想看到的是:
--------------------------------------------------
| peopleCount | hours |
--------------------------------------------------
| 4 | 21 |
--------------------------------------------------
| 11 | 22 |
--------------------------------------------------
| 22 | 23 |
--------------------------------------------------
| 13 | 00 |
--------------------------------------------------
| 5 | 01 |
--------------------------------------------------
对不起,我的思维能力不足。帮助表示赞赏!
解决方案
也许您想在这里使用联合:
SELECT
hours,
COUNT(*) as peopleCount
FROM
(
SELECT DATE_FORMAT(timestamp, '%H') AS hours
FROM unknownCheckin
WHERE timestamp > '2019-03-01 23' AND eid = '222'
UNION ALL
SELECT DATE_FORMAT(timestamp, '%H')
FROM checkin
WHERE timestamp > '2019-03-01 23' AND eid = '222'
) t
GROUP BY hours
ORDER BY -FIELD(hours, '23', '22');
推荐阅读
- javascript - “this.grades.push 不是函数”尝试将成绩添加到数组时
- python - Django中的分页问题
- bash - 从文本文件中选择值并将它们放在字符串之后
- sonarqube - 当项目一团糟时,SonarQube Quality Gate 怎么可能通过?
- python - 扩展 openpyxl 工作簿类
- android - 当应用程序处于后台时,在 onMessageReceived 中未收到 Firebase 通知
- r - 将小时数(未格式化)更改为 R 中的 hh:mm 时输出错误
- javascript - HTML 按钮在桌面上可以正常工作 在移动设备上不能正常工作
- email - 为什么相同的内容根据邮件客户端的不同解码?
- ffmpeg - FFMPEG 通过直接复制降低实时 h264 流的 fps