联接两个表,根据第二个表中的多个条件对第一个表进行计数

时间:2020-05-25 04:53:01

标签: mysql sql

如何联接两个表,根据第二个表中的多个条件对第一个表进行计数

这是我的桌子:

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

2 个答案:

答案 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

Demo on dbfiddle

在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;