Mysql
MySQL:條件選擇中的引用聚合函式
我想像這樣引用聚合函式:
樣本數據:
+-----------+----------+-------+ | member_id | group_id | score | +-----------+----------+-------+ | 1 | 1 | 12 | | 2 | 1 | 2 | | 3 | 1 | 20 | | 4 | 2 | 40 | | 5 | 2 | 4 | | 6 | 3 | 19 | | 7 | 3 | 17 | +-----------+----------+-------+
詢問:
SELECT MAX(IF(score = MAX(score), member_id, NULL)) AS member FROM members GROUP BY group_id
預期結果:
+-----------+ | member_id | +-----------+ | 3 | | 4 | | 6 | +-----------+
小提琴: http ://sqlfiddle.com/#!9/08af68/2
但這會導致錯誤:
組功能使用無效
我在這裡簡化了一些事情,但我試圖在更複雜的場景中使用它,其中
score
值是大型複雜查詢的結果。以我所知道的標準方式執行此操作會導致看起來有些荒謬,因為獲取工作值的初始查詢超過 35 行程式碼。**問題:**為什麼不允許這樣使用聚合函式?是否有一種解決方法不涉及有效地複制整個內容
SELECT
以獲取MAX()
用作參考點的價值?
切肉刀。但是不行。
要實現您的要求,需要對數據進行兩次傳遞。事情不是這樣的。
第一遍是找到每個組的最大值;第二遍是對照最大值檢查所有值。
您可以使用子查詢、一種
@variable
或多種其他方式來完成。按照標籤查看“分組最大值”的方法。
似乎 max 不能對同一屬性使用兩次。
因此,您期望選擇行的 member_id。
如下
+-----------+----------+-------+ | member_id | group_id | score | +-----------+----------+-------+ | 3 | 1 | 20 | | 4 | 2 | 40 | | 6 | 3 | 19 | +-----------+----------+-------+
但結果不一樣。
+-----------+----------+-------+ | member_id | group_id | score | +-----------+----------+-------+ | 1 | 1 | 20 | | 4 | 2 | 40 | | 6 | 3 | 19 | +-----------+----------+-------+
因為 group_id 1 的得分最大值為 20。但是 member_id 被選擇為第一行值。
改成這樣
SELECT ( SELECT member_id FROM members m WHERE m.score = MAX(members.score) ) AS member FROM members GROUP BY group_id