我有三个表,orders
,orders_details
和customers
。我需要一个客户为orders
表选择订单,所以我这样做了
orders
列:
id
customer_id
created
vat
discount
amount
paid
orders_details
列:
id
order_id
cost
qty
product
我使用的SQL
SELECT
orders.*,
SUM(orders_details.qty*orders_details.cost) as amount,
SUM(orders_details.qty) AS qty
FROM
orders,
orders_details,
customers
WHERE
orders.customer_id = customers.id
AND orders_details.order_id = orders.id
AND orders.customer_id = 1
但我的错误数量为30而不是20,数量错误
答案 0 :(得分:5)
如果要按订单汇总,则需要GROUP BY
子句。您也should use proper JOIN syntax,可能会考虑使用别名来使查询更紧凑。
SELECT
o.*,
SUM(od.qty * od.cost) AS amount,
SUM(od.qty) AS qty
FROM orders o
INNER JOIN orders_details od ON od.order_id = o.id
INNER JOIN customers c ON o.customer_id = c.id -- not used, might be excluded
WHERE o.customer_id =1
GROUP BY o.id
根据您使用的数据库系统,您可能需要在GROUP BY
中包含o。*中引用的所有列:
GROUP BY o.id, o.customer_id, o.created, o.vat, o.discount, o.amount, o.paid
最后注意:由于您似乎没有使用customers表中的任何数据,因此您可能完全排除该表。
答案 1 :(得分:2)
您错过了GROUP BY
条款,我猜这个条款应该在orders.id
上。