【问题标题】:What will be the query for this?对此的查询是什么?
【发布时间】:2020-05-15 09:15:39
【问题描述】:
    JOIN public.match m ON (s.stadium_id = m.stadium_id)
group

作为(

)

选择round_number ,体育馆的名字 , 观众 从 ( 选择round_number ,体育馆的名字 , 观众 ,排名()超过( PARTITION BY round_number ORDER BY spectators DESC ) AS rank1 从 t1 ) 作为 s1 WHERE rank1 = 1

<br>
Any smaller query than this?


【问题讨论】:

  • 嘿,编辑问题而不是添加信息作为 cmets。

标签: sql postgresql


【解决方案1】:

您可以使用子查询先获取最大值

select m.round_number, s.stadium_name, MaxSpec
from public.stadium s
    JOIN public.match m ON (s.stadium_id = m.stadium_id)
    JOIN
    (
       select m.round_number, MAX(m.no_spectators) as MaxSpec
       from public.stadium s
       JOIN public.match m ON (s.stadium_id = m.stadium_id)
       group by m.round_number 
    )a on m.no_spectators = a.MaxSpec

【讨论】:

    【解决方案2】:

    我认为你可以只使用窗口函数:

    select ms.*
    from (select m.round_number, s.stadium_name, m.no_spectators,
                 row_number() over (partition by m.round_number order by m.no_spectators desc) as seqnum
          from public.stadium s join
               public.match m 
               on s.stadium_id = m.stadium_id
         ) ms
    where seqnum = 1
    order by m.round_number;
    

    我不明白为什么内部查询需要聚合。

    【讨论】:

    • 我正在寻找的东西.. 谢谢!
    【解决方案3】:

    这只是给这只猫剥皮的另一种方法。将您的 MAX(no_spectators) 放入 WHERE 子句中。

    SELECT
      m.round_number,
      s.stadium_name,
      m.no_spectators 
    FROM
      PUBLIC.stadium s
        JOIN 
      PUBLIC.match m 
        ON s.stadium_id = m.stadium_id
    WHERE
      m.no_spectators = (SELECT MAX(no_spectators) FROM PUBLIC.match);
    

    这应该适用于介绍类。

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 2023-04-09
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多