5

我试图在使用 SUM 语句动态生成的列上获取 MAX。SUM 语句与“GROUP by”语法一起使用。

这是原始查询,但是需要对其进行修改以使用分组、总和,当然还有 MAX。

SELECT  SUM(video_plays) AS total_video_plays
    FROM `video_statistics` v_stat
    GROUP BY v_stat.`video_id` ASC

如您所见,SUM 将 video_plays 中的所有值添加total_video_plays ..

但我只是想获得total_video_plays的 MAX

我的尝试如下,但是它们不起作用..

SELECT SUM(video_plays) AS MAX(total_video_plays)
    FROM `video_statistics` v_stat
    GROUP BY v_stat.`video_id` ASC

如何在不使用子查询的情况下动态生成列上的 MAX - 因为上述内容已经放在一个列中。

4

5 回答 5

12

就像是

SELECT SUM(video_plays) AS total_video_plays
FROM `video_statistics` v_stat
GROUP BY v_stat.`video_id` 
ORDER BY total_video_plays DESC 
LIMIT 1 

帽子提示 OMG 小马正确的 MySQL 方言。

于 2009-11-19T20:39:35.370 回答
3

如果没有子查询,您将无法执行您所要求的操作,因为您无法运行两个聚合函数,一个在另一个之上。

于 2009-11-19T20:36:14.737 回答
3

这对你有用吗?

SELECT MAX(total_video_plays) from table (
 SELECT SUM(video_plays) AS total_video_plays
    FROM `video_statistics` v_stat
    GROUP BY v_stat.`video_id` ASC )

它包含一个子查询,但可能不是您所想的那样。

于 2009-11-19T20:39:57.883 回答
1

这对我有用。

select video_id, sum(video_plays) as sum_video_plays
from (
    select video_id, video_plays
         , row_number() over (partition by video_id
                              order by video_id desc) as rn
    from video_statistics
) as T
where rn = 1
group by video_id;
于 2021-08-05T20:35:37.060 回答
0

你不能这样做吗?:

SELECT video_id, max(video_plays) AS max_video_plays    
FROM `video_statistics` v_stat    
GROUP BY v_stat.`video_id` ASC

这里有一个例子:

http://dev.mysql.com/doc/refman/5.1/de/select.html

SELECT user, MAX(salary) FROM users
GROUP BY user HAVING MAX(salary) > 10;

编辑:第二次尝试,尽管使用子查询:

select max(sum_video_plays)
from (
SELECT video_id, sum(video_plays) AS sum_video_plays    
FROM `video_statistics` v_stat    
GROUP BY v_stat.`video_id`
) x

您的外部查询很可能是从一个更小的集合中选择的,并且(取决于您的数据分布等)可能非常高效。

于 2009-11-19T20:35:05.487 回答