SQL,多行显示相同总计值的订单,如何计数一次?

问题描述 投票:0回答:1

我有一个数据集,其中包含多行显示的唯一餐厅 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;
sql count subquery
1个回答
0
投票

您的数据是非规范化的,因为它在每一行上都有整个集合的总和。

需要按顺序分组得到

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;
© www.soinside.com 2019 - 2024. All rights reserved.