首页 > 解决方案 > 联接两张表,根据第二张表中的多个条件统计第一张表

问题描述

如何连接两张表,根据第二张表中的多个条件统计第一张表

这是我的桌子:

  1. 类别表

| id |category|
+----+--------+
| 1  | food   |
| 2  | drinks |
+----+--------+
  1. 产品标签

| 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 数据库处理它。我无法查询这些类别的列表,有人可以帮我查询吗?谢谢您的帮助

标签: mysqlsql

解决方案


您可以使用条件聚合来实现您想要的结果:

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

dbfiddle 上的演示

在 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 上的演示


推荐阅读