mysql - 联接两张表,根据第二张表中的多个条件统计第一张表
问题描述
如何连接两张表,根据第二张表中的多个条件统计第一张表
这是我的桌子:
- 类别表
| id |category|
+----+--------+
| 1 | food |
| 2 | drinks |
+----+--------+
- 产品标签
| id |category| name | entry | verified |
+----+--------+--------------------+------------+
| 1 | 1 | rice | 2020-05-13 | 2020-05-25 |
| 2 | 1 | noodle| 2020-05-18 | 0000-00-00 |
| 3 | 2 | Milk | 2020-05-15 | 0000-00-00 |
| 4 | 2 | Syrup | 2020-05-20 | 0000-00-00 |
+----+--------+-------+------------+------------+
我想获取类别列表以及验证的产品数量,如下所示。
+----+--------+-------+----------+
| No |category| entry | verified |
+----+--------+-------+----------+
| 1 | food | 1 | 1 |
| 2 | drinks | 2 | 0 |
+----+--------+-------+----------+
我用 php 脚本和 mysql 数据库处理它。我无法查询这些类别的列表,有人可以帮我查询吗?谢谢您的帮助
解决方案
您可以使用条件聚合来实现您想要的结果:
SELECT c.id AS No,
c.category,
COUNT(CASE WHEN p.entry != '0000-00-00' AND p.verified = '0000-00-00' THEN 1 END) AS entry,
COUNT(CASE WHEN p.verified != '0000-00-00' THEN 1 END) AS verified
FROM category c
LEFT JOIN product p ON p.category = c.id
GROUP BY c.id, c.category
输出:
No category entry verified
1 food 1 1
2 drinks 2 0
在 MySQL 中,您可以将条件简化COUNT
为 a SUM
,因为 MySQL 在数字上下文中将布尔值视为 1 或 0:
SELECT c.id AS No,
c.category,
SUM(p.entry != '0000-00-00' AND p.verified = '0000-00-00') AS entry,
SUM(p.verified != '0000-00-00') AS verified
FROM category c
LEFT JOIN product p ON p.category = c.id
GROUP BY c.id, c.category
此查询的输出相同。dbfiddle 上的演示
推荐阅读
- python-3.x - 如何解决安装tensorflow时出现的问题:HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out
- geometry - 围绕网格中的一个点缩放:重绘网格并移动“原点”,使光标下的点保持固定
- python - Python:将分钟或秒添加到仅限时间的对象
- java - 我们怎么能在一定范围内,最大次数,一个int能被2整除
- mysql - 从表中删除数据而不创建临时表
- ios - Swift:重构 NSMutableAttributedString
- zk - 如何使用动态文本框创建通信
- mule - Mule 是否支持键中的“-”(连字符)?
- javascript - 带有 JQuery 事件的条码阅读器
- ios - 当我使用 UIDocumentPickerViewController 从 iCloud 中选择 zip 文件时无法与帮助应用程序通信