sql - 用于复杂win查询的sql
问题描述
我有下表作为记录
TeamA | TeamB | Winner
--------+------------+---------
Lakers | Sacramento | Lakers
Clipper | Rockets | Rockets
Lakers | Suns | Suns
需要像这样转换成表格
Team | Win | Loss | TotalMatches
Lakers | 1 | 1 | 2
........
我从工会开始但无法进步
Select
TeamA, TeamB
from
Records
union
Select
teamA, teamB
解决方案
您可以先使用 bu 取消透视UNION ALL
,然后应用条件聚合
SELECT team, SUM(CASE WHEN winner = team THEN 1 ELSE 0 END) AS Win,
SUM(CASE WHEN winner != team THEN 1 ELSE 0 END) AS Loss,
COUNT(*) AS TotalMatches
FROM ( SELECT teamA AS team, Winner FROM Records
UNION ALL
SELECT teamB, Winner FROM Records ) r
GROUP BY team
推荐阅读
- flutter - 如何一个一个播放多个音频?
- delphi - 项目引发异常类 EListError,并带有消息“列表索引超出范围 (1)”。进程停止。使用 Step 或 Run 继续
- vue.js - 选择项目时 vue-simple-suggest 出错
- javascript - 使用 setState 更新不变性助手将对象拼接到状态数组中
- mysql - MySQL 删除外键约束并删除 NOT NULL
- python - Psycopg2 无法在 Windows 中导入
- json - 我在哪里可以为 Roku 存储一个 Json 来解析?
- terraform - Terraform:多个 ACM 证书
- angularjs - Angular 中的 Firebase 身份验证(护目镜)
- javascript - 根据视图更改菜单