首页 > 解决方案 > SQL 使用同一查询从同一组数据中获取多个结果计数

问题描述

我正在处理产品数据,其中一部分具有以下结构(我们称之为product_serials):

表结构

该表是产品序列号的集合。该snapped字段通过其序列号确定是否已购买特定产品。我正在尝试使用单个 SQL 查询查询该表以获取所有序列号以及所有未购买的相同序列号的计数。product_id到目前为止使用COUNT(ps1.id) AND COUNT(ps2.id) ... WHERE ps2.snapped = FALSE似乎不起作用,它仍然为所有连续剧和未购买的连续剧计算相同的值,甚至夸大了计数,所以肯定做错了什么。

我会错过什么?

根据要求,我的 SQL 查询:

SELECT pd.id AS product_id, pd.description, 
COUNT(pds.id) AS total, COUNT(pds2.id) AS available 
FROM products pd 
LEFT JOIN product_serials pds ON pds.product_id = pd.id 
LEFT JOIN product_serials pds2 ON pds2.product_id = pd.id 
WHERE pds2.snapped = FALSE
GROUP BY pd.id 
ORDER BY pd.date_added DESC

标签: mysql

解决方案


在这里,您连接表(甚至将它们相乘),然后WHERE对两者应用条件。

我建议如下:

SELECT product_id, count(serial), count(unpurchased)
  FROM (SELECT product_id, serial,
      CASE WHEN snapped THEN NULL ELSE 1 END AS unpurchased)
  GROUP BY product_id

推荐阅读