繁体   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