【问题标题】:How to use the SUM function with Group BY in MySQL?如何在 MySQL 中将 SUM 函数与 Group BY 一起使用?
【发布时间】:2022-01-29 18:18:33
【问题描述】:

我有一个 SQL 语句,它根据给定的变量返回一些记录。

查询:

SELECT
     country
    ,(MAX(d_views) - MIN(d_views)) AS viewz 
FROM mv_data
WHERE add_date BETWEEN '2022-01-22' AND '2022-01-22' 
GROUP BY title
ORDER BY viewz DESC;

输出:

country viewz
NG 14735
NG 12494
GH 6099
GH 5181
GH 3381
NG 3293
GH 2288
NG 169

我正在寻找的是: 要使用 SUM() 函数根据他们的国家/地区总结所有 viewz,例如:

country viewz
NG 30691
GH 16949

这就是我所做的:

SELECT
     country
    ,SUM(MAX(d_views) - MIN(d_views)) AS viewz 
FROM mv_data
WHERE add_date BETWEEN '2022-01-26' AND '2022-01-26'
GROUP BY title
ORDER BY viewz DESC;

但我收到此错误:

#1111 - 组函数的使用无效

我也试过GROUP BY country没有SUM()函数,结果不正确:

查询:

SELECT
     country
    ,(MAX(d_views) - MIN(d_views)) AS viewz 
FROM mv_data
WHERE add_date BETWEEN '2022-01-26' AND '2022-01-26'
GROUP BY country
ORDER BY viewz DESC;

输出:

country viewz
NG 4918377
GH 8185474

我做错了什么?

注意:d_views 是我表中的一个字段。根据给定的日期,我们有最小值和最大值。

【问题讨论】:

  • SELECT country, ... GROUP BY title ... ???真的吗?如果确定的country 值匹配一个且仅一个title 值并向后匹配,则使用GROUP BY country。如果不是,那么您的查询显然是错误的,并且会产生没有意义的输出。学习ONLY_FULL_GROUP_BYSQL模式。

标签: mysql sql group-by


【解决方案1】:

使用第一个作为第二个like的子查询

SELECT
   country
   SUM(viewz) as viewz
FROM (SELECT
     country
    ,MAX(d_views) - MIN(d_views) AS viewz 
FROM mv_data
WHERE add_date BETWEEN '2022-01-26' AND '2022-01-26'
GROUP BY title) t1
GROUP BY country
ORDER BY viewz DESC;

【讨论】:

  • 非常感谢。这工作得很好
【解决方案2】:

如果您希望使用 SUM() 函数根据他们的国家/地区总结所有 viewz,只需使用以下内容;

SELECT
     country
    ,SUM(d_view) AS viewz 
FROM mv_data
WHERE add_date BETWEEN '2022-01-26' AND '2022-01-26'
GROUP BY country
ORDER BY viewz DESC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2015-02-13
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多