【发布时间】: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模式。