首页 > 解决方案 > 根据组统计删除记录组

问题描述

我有以下两个示例表

团队

团队编号 队名
1
2 老虎队
3 狮子
4 鲨鱼

球员

玩家编号 姓名 团队编号 游戏时间
1 约翰 1 5
2 亚当 1 4
3 史密斯 1 5
4 米歇尔 2 5
5 斯蒂芬妮 2 10
6 大卫 2 10
7 考特尼 2 2
8 坦率 2 7
9 特蕾莎 2 1
10 迈克尔 3 3
11 可能 4 1
12 丹尼尔 4 1
13 丽莎 4 4

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

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

团队

队名 玩家人数 总游戏时间
3 14
鲨鱼 3 6
狮子 1 3

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

队名 玩家人数 总游戏时间
3 14
狮子 1 3

标签: sqlpostgresql

解决方案


您可以尝试以下方法:

查询 #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;
队名 玩家人数 总游戏时间
3 14
鲨鱼 3 6
狮子 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;
队名 玩家人数 总游戏时间
3 14
狮子 1 3

在 DB Fiddle 上查看

让我知道这是否适合您。


推荐阅读