[英]GROUP BY and uniqueness in multiple columns
可以說,我希望從一些聯接表中選擇3列:event_id,home_team和聚合函數的結果。 event_id是自動遞增的主鍵。 對於表中的每個記錄,home_team並非唯一。 我想按event_id分組以生成聚合函數,然后按采用最高3個值的聚合函數的結果進行排序。 但是我也希望home_team是唯一的。 我怎樣才能做到這一點? 我不能執行DISTINCT,因為記錄將包含home_team,event_id和聚合函數的結果。 event_id將始終是唯一的,因此我的DiSTINCT查詢不執行任何操作。
我必須按event_id進行分組,因為聚合函數取決於此,因此我無法按home_team進行分組。 如果我按兩者分組,那將無濟於事,因為...
例
Table 1
id: 1
event_id: 1
value: 2
id 2
event_id: 1
value: 6
id 3
event_id: 2
value: 4
id4
event_id: 2
value: 3
id5
event_id: 3
value: 1
表2
event_id (PK, autoincremented): 1
home_team: 1
event_id: 2
home_team 2
event_id: 3
home_team: 1
SELECT *, AVG(table1.value) as average FROM table1 JOIN table2 ON table1.event_id = table2.event_id GROUP BY table2.event_id ORDER BY average DESC
我需要按table2.event_id分組,以生成正確的聚合函數結果。 但是,我也希望home_team是與眾不同的,因此所需的輸出將是帶有event_id 1和event_id 2的兩個結果
好吧,可以肯定的是,由唯一鍵分組的聚合函數不會為您做很多事情。 聽起來當您真正想要的只是每個home_team
值最高的三個事件時,您就陷入了分組的想法。
嘗試這樣的事情,而不是:
select
event_id,
home_team,
value
from
my_tbl t
where
event_id in
(select event_id from my_tbl
where home_team = t.home_team
order by value desc limit 0,3)
更新:您的編輯清除了一些內容,所以去了:
select
(select min(event_id) from table2 where home_team = t2.home_team) as event_id,
t2.home_team,
avg(t1.value) as average
from
table1 t1
inner join table2 t2 on
t1.event_id = t2.event_id
group by
t2.home_team
您所描述的完全是荒謬的。 您想按event_id
分組,然后只顯示一個home_team
? 除非您希望占據home_team
行:
select
home_team,
max(average) as topavg
from
(
select
t2.event_id,
t2.home_team,
avg(t1.value) as average
from
table1 t1
inner join table2 t2 on
t1.event_id = t2.event_id
group by
t2.event_id, t2.home_team
) as a
group by
home_team
用這個:
GROUP BY event_id, home_team
這將僅對具有相同event_id和相同home_team的記錄進行分組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.