2009-11-19 75 views
4

我想在使用SUM語句動態生成的列上獲取MAX。 SUM語句與'GROUP by'語法一起使用。由SUM和GROUP BY生成的列上的MAX

這是最初的查詢,但是需要修改它來處理分組,彙總,當然還有MAX。

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

正如你所看到的總和加上內部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 

你怎麼會得到最大的動態做出了不列使用子查詢 - 因爲上面已經放在一個範圍內。

回答

10

喜歡的東西

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的方言。

+0

謝謝,因爲我有SQL問題嵌套了大約5次。我想我已經走過了'壞習慣'路線。這就是爲什麼我試圖保持潛艇最小。這是訣竅。再次感謝你!拉里。 – BeaversAreDamned 2009-11-19 21:01:24

+0

當查詢結果中有多個最大值時,此查詢在情景中失敗 – gkiko 2013-04-19 18:44:27

+0

爲什麼?用戶沒有要求最大視頻播放的次數,只有最大數量是什麼,這個查詢將返回。 – 2013-04-19 18:55:09

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 

你的外部查詢很可能是從一個更小的集合中進行選擇,並且(取決於你的數據分佈等)可能是相當高效的。

+0

第一個查詢會給你最高的單項,而不是最高的總和。 – 2009-11-19 20:38:47

+0

@Dave:不用擔心,有可能MySQL的GROUP BY會起作用,但這很令人沮喪,因爲我意識到任何其他數據庫都不支持該語法。 – 2009-11-19 20:40:15

3

如果沒有子查詢,你不能做你所要求的,因爲你不能運行兩個聚合函數,一個在另一個之上。

+0

它會對性能產生重大影響嗎? Iv讀取子查詢可能導致您的資源陷入癱瘓 那麼,我會如何使用子查詢? – BeaversAreDamned 2009-11-19 20:40:23

+0

+1不會像我那樣誤解問題! – davek 2009-11-19 20:40:36

+1

@Beavers:MySQL上的子查詢性能不佳,但並非所有數據庫都是這樣。 – 2009-11-19 20:41:50

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) 

它包含一個子查詢,但可能不是你所想的意義。

+0

我不認爲這會工作 - 我只做到了FROM(SELECT ...',但這是使用兩個聚合函數做到這一點的唯一方法。 – 2009-11-19 20:47:39

+0

感謝您的嘗試!欣賞它。 – BeaversAreDamned 2009-11-19 21:25:53