【问题标题】:SQL Query with SUM with Group By使用 SUM 和 Group By 的 SQL 查询
【发布时间】:2017-01-23 22:31:04
【问题描述】:

我无法让我的查询按我需要的方式工作。我有一个简单的查询,它输出以下数据:

我需要对每个月的 total_reseller_sales 求和,而不是在同一月份显示两次。我尝试以下方法,但它会引发错误

SELECT rs.resellerid, rs.sid, SUM(rs.total_reseller_sales), s.month, s.sid 
FROM sales_report_resellers rs 
INNER JOIN resellers r ON rs.resellerid = r.resellerid 
INNER JOIN sales_report s ON rs.sid = s.sid 
WHERE (rs.sid > '294' AND rs.sid < '306') AND r.insidesales = 0 
  AND r.resellerid IN (7, 18, 22) 
GROUP BY month

我得到的错误是 SELECT 中的每个元素都是无效的,因为它不包含在聚合函数或 GROUP BY 子句中。

如果我将它们包含在 GROUP BY 中,那么我会得到相同的结果。

任何帮助将不胜感激。

【问题讨论】:

  • 好吧,如果您不想在同一月份显示两次,那么当一个月内存在两个 resellerID 时,您应该显示什么?
  • 我相信在使用 SUM、COUNT、MIN 等函数时,您需要拥有 Have 而不是 where...
  • 你不能把你的总和一起显示 resellerid,因为你没有把它放在 group by 子句中。 rs.sid 和 s.sid 也是如此。您必须更改查询和字段列表的方法
  • 我可以想象一个查询返回这些字段:SUM(rs.total_reseller_sales), s.month, rs.sid (group by 如下 s,month, rs.sid)
  • 如果您想合计销售额,那么您必须从您的 SELECT 中删除经销商 ID(因为多个卖家在任何给定月份都会有销售额)。如果您只想要给定月份的总销售额,请停止尝试通过经销商进行拆分。只需选择月份和 SUM(total_reseller_sales)。

标签: sql sql-server


【解决方案1】:

GROUP BY 子句为您在该子句中指定的列的每个唯一组合形成行。

如果要显示每个月的总和,则只在 group by 子句中包含 s.month:例如

SELECT s.month, SUM(rs.total_reseller_sales)
FROM sales_report_resellers rs 
INNER JOIN resellers r ON rs.resellerid = r.resellerid 
INNER JOIN sales_report s ON rs.sid = s.sid 
WHERE (rs.sid > '294' AND rs.sid < '306') AND r.insidesales = 0 
  AND r.resellerid IN (7, 18, 22) 
GROUP BY s.month

如果您在 select 子句中包含经销商详细信息,也将它们包含在 group by 子句中,那么每个经销商 AND 月将有一行

【讨论】:

  • 完美运行。我猜您不必因为 SUM 而在子句中添加 rs.total_reseller_sales?
  • 非常感谢!我的问题是我在INNER JOIN 之前有GROUP BY ...
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
相关资源
最近更新 更多