我有表的集合在关系数据库SQL - 计数与嵌套子查询
products
categories
orders
line_items
customers
产品与类别具有多对多关系(连接表categories_products
),并且也具有并属于许多orders
到line_items
,这是products
和orders
的连接表,带有一个id。 A customer
也有很多orders
。
我试图把一些SQL,这将使我这种反应:
customer_id | customer_first_name | category_id | category_name | number_purchased
-----------------------------------
1 |Jack | 1 | Electronics | 15
2 |Jill | 1 | Electronics | 2
2 |Jill | 2 | Hiking | 3
这是SQL的巨厚片我一直在试图用它来获取这些值:
SELECT
DISTINCT customers.id AS customer_id,
customers.first_name AS customer_first_name,
categories.id AS category_id,
categories.name AS category_name,
(
SELECT count(li.id) FROM line_items li
INNER JOIN orders o ON li.order_id = o.id
INNER JOIN products p ON li.product_id = p.id
INNER JOIN categories_products cp ON cp.product_id = p.id
WHERE
o.customer_id = customer_id
AND o.status = 3
AND cp.category_id = category_id
) AS number_purchased
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.id
LEFT JOIN line_items li ON li.order_id = orders.id
LEFT JOIN products ON products.id = li.product_id
LEFT JOIN categories_products catpr ON catpr.product_id = products.id
LEFT JOIN categories ON catpr.category_id = categories.id
只有计数本身是错误的。而不是获取客户在特定类别中购买的订单项数量,而是对所有已完成订单的LineItem进行计数。
如何才能让计数正确地代表customer
在category
内购买的line_items
的数量?
注意:在SQL文本中,o.status = 3
正在使用枚举来指示订单是“完整的”。
你的查询看起来像它特定于类别。将删除'number_purchased'返回一个类似的输出? –
我建议通过添加分组 –
@RudyM'number_purchased'是唯一返回不正确的值。理论上我可以在每个'customer'和'category'的每个组合或代码级别的单独查询中获得'number_purchased'值,但是我特别试图编写单个SQL语句来正确输出所有这些信息 – PapaPoison