我有一个数据集,其中包含多行显示的唯一餐厅 ID 和订单,每个订单还有一列包含 Total_with_VAT
如果我像这样查询它,它会计算每行的总计,我如何修改它以仅计算唯一的订单 ID 以获得准确的总计?
SELECT DISTINCT Restaurant_ID,
ROUND(SUM(Total__with_VAT_),2) AS Total_With_VAT
FROM rest.totals
GROUP BY Restaurant_ID
ORDER BY total_with_VAT DESC;
我尝试运行子查询,但它返回相同的结果
SELECT
Restaurant_ID,
ROUND(SUM(Total_with_VAT),2) AS Total_VAT
FROM (
SELECT Restaurant_ID,
SUM(Total__with_VAT_) AS Total_with_VAT
FROM rest.totals
GROUP BY Restaurant_ID
) AS subquery
GROUP BY Restaurant_ID
ORDER BY Total_VAT DESC;
您的数据是非规范化的,因为它在每一行上都有整个集合的总和。
需要按顺序分组得到
MIN
或MAX
,然后再次分组求和。
SELECT
rt.Restaurant_ID,
ROUND(SUM(rt.Total_with_VAT), 2) AS Total_VAT
FROM (
SELECT
rt.Restaurant_ID,
rt.Order_ID
MIN(rt.Total__with_VAT_) AS Total_with_VAT
FROM rest.totals rt
GROUP BY
rt.Restaurant_ID,
rt.Order_ID
) AS rt
GROUP BY
rt.Restaurant_ID
ORDER BY
Total_VAT DESC;