如何联接两个表,根据第二个表中的多个条件对第一个表进行计数
这是我的桌子:
| 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数据库处理它。我很难查询以获取这些类别的列表 有人可以帮我查询吗?谢谢您的帮助
答案 0 :(得分:2)
您可以使用条件聚合来获得所需的结果:
ListBlobsSegmentedAsync(String, Boolean, BlobListingDetails, Nullable<Int32>,
BlobContinuationToken, BlobRequestOptions, OperationContext, CancellationToken)
输出:
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
在MySQL中,您可以将条件No category entry verified
1 food 1 1
2 drinks 2 0
简化为COUNT
,因为MySQL在数字上下文中将布尔值视为1或0:
SUM
此查询的输出相同。 Demo on dbfiddle
答案 1 :(得分:0)
SELECT
cat.id as `No`,
cat.category,
SUM(IF(pro.verified = '0000-00-00' and pro.entry != '0000-00-00', 1, 0)) as entry,
SUM(IF(pro.verified != '0000-00-00', 1, 0)) as verified
FROM
category AS cat
INNER JOIN
product AS pro
ON
cat.id = pro.category
GROUP BY
pro.category;