SQL使用相同的查询从同一组数据中获取多个结果计数

时间:2018-07-05 08:50:17

标签: mysql

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

Table Structure

该表是产品序列号的集合。 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

1 个答案:

答案 0 :(得分:1)

在这里联接表(甚至将它们相乘),然后对两者都应用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