我正在尝试为该问题编写PostgreSQL查询:SQL查询给出的结果太多
2011年有多少产品被购买? (2011年买入意味着订单描述在2011年完成)。
到目前为止,我已经有了这个查询:
SELECT
COUNT(product.id)
FROM
product
JOIN orderitem ON
productid = product.id
JOIN "order" ON
"order".id = orderitem.orderid AND
EXTRACT(year FROM orderplaced) = 2011
JOIN orderstatus ON
orderstatus.orderid = "order".id
JOIN orderstatusdescription ON
orderstatusdescription.id = orderstatusdescriptionid AND
orderstatusdescription.description = 'Completed';
但是这会导致产品231410在数据库中只包含1000使用DISTINCT(product.id)
逻辑导致的1000
我计数不知道我做错了什么。
如果只有1个orderstatus“已完成”,我会说这是关于正确的,那许多独立的产品ID都在订单中。如果'SUM(金额)'可以得到销售物品的总数,那么你可以计算(DISTINCT product.id)'你得到的独特产品的数量是多少? – Wrikken 2013-03-05 20:32:00
当然你应该加入order.id = orderitem.id而不是orderid? – Byron 2013-03-05 20:33:49
这不是你的问题的原因,但你应该将'EXTRACT(year FROM orderplaced)= 2011'和'orderstatusdescription.description ='Completed''移到WHERE子句中,因为它不是连接逻辑的一部分。 – 2013-03-05 20:41:41