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

Mysql 连接两个表,根据第二个表中的多个条件对第一个表进行计数,mysql,sql,Mysql,Sql,如何连接两个表,根据第二个表中的多个条件计算第一个表 这是我的桌子: 类别表 产品标签 我想得到一个类别的清单,以及验证的产品数量,如下所示 +----+--------+-------+----------+ | No |category| entry | verified | +----+--------+-------+----------+ | 1 | food | 1 | 1 | | 2 | drinks | 2 | 0 | +-

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

这是我的桌子:

  • 类别表
  • 产品标签
  • 我想得到一个类别的清单,以及验证的产品数量,如下所示

    +----+--------+-------+----------+
    | 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中,您可以将条件的
    计数
    简化为
    总和
    ,因为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
    

    此查询的输出相同

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

    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中,您可以将条件的
    计数
    简化为
    总和
    ,因为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
    

    此查询的输出相同

    我尝试了这个脚本,结果是
    ++------------------+---------+---------+----+----+----否|类别|条目|已验证|+----+----+----+----+----你的数据必须与你在问题中显示的不同。我的演示使用了您在问题中提供的数据,并给出了预期的结果result@priyo提供正确的数据。尼克的解决方案看起来是对的。我错了;我完全是以另一种方式读的。奇怪。也许我需要一些咖啡!我刚喝了一杯。因此,我的超级快速回答!:-PI尝试了这个脚本,结果是
    ++------------------+---------+---------+----+----否|类别|条目|已验证|+----+----+---------+----你的数据必须与你在问题中显示的不同。我的演示使用了您在问题中提供的数据,并给出了预期的结果result@priyo提供正确的数据。尼克的解决方案看起来是对的。我错了;我完全是以另一种方式读的。奇怪。也许我需要一些咖啡!我刚喝了一杯。因此,我的超级快速回答!:-Pthank@sachin kumara liyanage,但是你的剧本的结果是这样的:“食物”3“1”`谢谢你@nich,我复制你的剧本是错误的,你是对的。谢谢你的帮助谢谢@sachin kumara liyanage,但是你的剧本的结果是这样的:`1 |食物`3 | 1 |谢谢你@nich,我复制你的剧本是错误的,你是对的。谢谢你的帮助