簡體   English   中英

GROUP BY和多列中的唯一性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM