我正在尝试在使用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 - 因为上面已经放在一个。
答案 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;