【问题标题】:SQL needed: sum over values by month需要 SQL:按月对值求和
【发布时间】:2019-06-27 22:45:54
【问题描述】:

我有一个表,其值如下:

count1   count2  count3  month
12        1       4       01/12/2011
6         5       4       23/12/2011
14        6       9       11/06/2011
8         5       4       19/06/2011

如何获得以下结果?

count1   count2  count3  month
18        6       8       12
22        11      13      06

【问题讨论】:

  • 这里的判别器是什么?第一组结果与第二组结果的区别是月份列还是其他?
  • 请举一个你的结果表的例子,与第一个表有关。因此,任何人都可以轻松理解您想要什么。

标签: sql-server sql-server-2005


【解决方案1】:
SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month)
  FROM myTable
 GROUP BY MONTH(month)

由于 MONTH 是 SQL Server 关键字,如果您的日期列确实是这样调用的,您可能必须转义列名称 month(例如 [month])。 (感谢 Endy 的评论!)

此外,如果选择的数据跨度超过一年,您可能还需要按年份分组:

SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month), YEAR(month)
  FROM myTable
 GROUP BY MONTH(month), YEAR(month)

【讨论】:

  • 您可能希望将该列名转义为 [月]
【解决方案2】:

减少查询负担

SELECT SUM(count1), SUM(count2), SUM(count3), substring(month,4,2)   
FROM myTable  
GROUP BY substring(month,4,2)

【讨论】:

    【解决方案3】:
    SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month)   
    FROM Table  
    GROUP BY trunc(month,'mm')
    

    这将在 PL/SQL 开发人员中运行 :)

    【讨论】:

    • 但它不会在他正在使用的 SQL Server 上运行(无论如何根据标签)。
    • ya mike ..可能不会.. :)
    • 但是每天获得 PL/SQL 的剂量总是很好,谢谢!
    【解决方案4】:
    SELECT
    SUM(count1) as sum_count1,
    to_char(month, 'yyyy-MM') as month
    FROM
    dataframe 
    GROUP BY
    month
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多