【问题标题】:Totals and Runningtotals with SQL "sum" and "over" Syntax使用 SQL“sum”和“over”语法的 Totals 和 Runningtotals
【发布时间】:2020-03-19 10:34:46
【问题描述】:

在我的 SQL 表中,我有“国家”和“we200326”列。 “we200326”列仅包含“1”或“NULL”条目。

我正在尝试获取“we200326”列中所有“1”的总数以及国家/地区的总数。我写了以下语句,但它给出了一个错误,但我不知道我做错了什么(我对此很陌生):

SELECT country, we200326,
    (SUM(we200326) OVER () AS Total)
    (SUM(we200326) OVER (PARTITION BY country) AS CountryTotal)
FROM table_name
ORDER BY CountryTotal, Country;

我得到的错误是这样的:

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OVER () AS Total)
        (SUM(we200326) OVER (PARTITION BY country) AS CountryTotal)
    ' at line 2

我搜索了类似的错误并发现了几个(每次都是一个简单的语法错误,如空格或逗号左右)我尝试了几个版本,但在按照这些说明操作时无法解决我的问题。任何帮助,将不胜感激。

【问题讨论】:

  • 您好 J.K.,欢迎来到 Stack Overflow。您在第一个窗口总和后缺少一个逗号。此外,总和周围的括号是多余的。
  • 谢谢 - 哇超快的答案!我添加了逗号并删除了多余的括号,但现在我得到以下信息:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '() AS Total, SUM(we200326) OVER (PARTITION BY country) AS CountryTotal FROM k' 附近使用正确的语法
  • 您正在运行哪个版本的 MySQL (select version())?窗口函数需要 MySQL 8.0。
  • 我正在通过 PHPMyAdmin 界面运行 5.7.29-32-log 版本
  • 请更新您的问题。或者删除它。

标签: mysql sql group-by sum window-functions


【解决方案1】:

窗口函数仅在 MySQL 8.0 中可用。

在早期版本中,一种选择是使用子查询:

select 
    country,
    wewe200326,
    (select sum(we200326) from table_name) total,
    (select sum(we200326) from table_name t1 where t1.country = t.country) country_total
from table_name t
order by country_total, country

【讨论】:

  • 谢谢!现在它起作用了。我只需要在最后一行添加一个逗号即可使其完整。按country_total,国家/地区排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2012-12-02
相关资源
最近更新 更多