MAX和GROUP BY生成的列上的MAX

时间:2009-11-19 20:32:06

标签: sql mysql group-by sum max

我正在尝试在使用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 的最大值

我的尝试在下面,但它们不起作用..

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

如何在不使用子查询 的情况下动态 的列上获取MAX - 因为上面已经放在一个。

5 个答案:

答案 0 :(得分:11)

这样的东西
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 

Hat Tip OMG小便适用于正确的MySQL方言。

答案 1 :(得分:3)

如果没有子查询,你就不能做你要求的事情,因为你不能运行两个聚合函数,一个在另一个之上。

答案 2 :(得分:2)

这对你有用吗?

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 )

它包含一个子查询,但也许不是你想的意思。

答案 3 :(得分: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

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

答案 4 :(得分:0)

这对我有用。

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;