【问题标题】:Delete Group of Records based on Group Statistic根据组统计删除记录组
【发布时间】:2021-10-07 09:30:27
【问题描述】:

我有以下两个示例表

团队

Team ID Team Name
1 Bears
2 Tigers
3 Lions
4 Sharks

玩家

Player ID Name Team ID Playtime
1 John 1 5
2 Adam 1 4
3 Smith 1 5
4 Michelle 2 5
5 Stephanie 2 10
6 David 2 10
7 Courtney 2 2
8 Frank 2 7
9 Teresa 2 1
10 Michael 3 3
11 May 4 1
12 Daniel 4 1
13 Lisa 4 4

我需要一个符合以下条件的 select 语句

  • 选择所有少于 4 人的球队
  • 计算出这些球队中所有球员的总上场时间,并以此为基础对结果表进行降序排序

根据给出的示例,我想要一个如下所示的表格:

团队

Team Name Num Players Total Playtime
Bears 3 14
Sharks 3 6
Lions 1 3

最后,我想从前一个表中删除所有偶数行,所以最终表看起来像:

Team Name Num Players Total Playtime
Bears 3 14
Lions 1 3

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以尝试以下方法:

    查询 #1

    SELECT
        t."Team Name",
        COUNT(p."Player ID") as "Num Players",
        SUM(p."Playtime") as "Total Playtime"
    FROM
        teams t
    LEFT JOIN
        players p ON t."Team ID"=p."Team ID"
    GROUP BY
        t."Team Name"
    HAVING
        COUNT(p."Player ID") < 4
    ORDER BY 
        SUM(p."Playtime") DESC;
    
    Team Name Num Players Total Playtime
    Bears 3 14
    Sharks 3 6
    Lions 1 3

    查询 #2

    SELECT
        t1."Team Name",
        t1."Num Players",
        t1."Total Playtime"
    FROM (
    SELECT
        ROW_NUMBER() OVER (ORDER BY SUM(p."Playtime") DESC) as rn,
        t."Team Name",
        COUNT(p."Player ID") as "Num Players",
        SUM(p."Playtime") as "Total Playtime"
    FROM
        teams t
    LEFT JOIN
        players p ON t."Team ID"=p."Team ID"
    GROUP BY
        t."Team Name"
    HAVING
        COUNT(p."Player ID") < 4
    ) t1
    WHERE MOD(rn,2)=1
    ORDER BY rn;
    
    Team Name Num Players Total Playtime
    Bears 3 14
    Lions 1 3

    View on DB Fiddle

    让我知道这是否适合你。

    【讨论】:

    • 成功了,谢谢!
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多