【问题标题】:How to use Max() combining two subqueries如何使用 Max() 组合两个子查询
【发布时间】:2018-12-29 16:26:19
【问题描述】:

我有一张包含篮球比赛信息的表格,我需要找到赢得更多比赛的球队。表格如下:

EQ1     EQ2     DATE       RES1   RES2
--------------------------------------
CAL     VAL     21/10/16    72     82
UNI     VAL     24/02/17    58     68
RMA     FCB     02/11/16    81     64

其中 e1 是本地球队, res1 是得分,e2 是客队, res2 是得分。

我尝试了不同的方法,但没有结果,stackoverflows 中似乎没有解决它的答案。我知道我可以通过以下查询知道一支球队赢得了多少场比赛:

select * 
from encuentros 
where (eq1 = e1.eq1 and res1 > res2) 
   or (eq2 = e1.eq2 and res2 > res1);

这就是,成为本地人并获胜或成为访客并获胜。现在我需要为每支球队都这样做,并获得最大数量的比赛胜利

【问题讨论】:

    标签: sql oracle count


    【解决方案1】:

    使用条件逻辑得到获胜队伍,然后聚合:

    select winning_team, count(*)
    from (select (case when res1 > res2 then eq1 else eq2 end) as winning_team
          from t
         ) t
    group by winning_team
    order by count(*) desc;
    

    要仅获取一行,请在 Oracle 12c+ 中使用 fetch first 1 row only。或者使用子查询和rownum 或分析函数。

    【讨论】:

    • 好主意,非常感谢。另外,使用您的想法,我可以在不订购的情况下获得最大值,并使用 have 重复代码。
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2013-05-28
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多