繁体   English   中英

从3个选择查询中一行获取结果数据

[英]Getting resulting data in one row from 3 select queries

我有桌子:

玩家:

id
name

地点:

id
playerId
tournamentId

比赛:

id
name
prize1
prize2
prize3

查询:

(
    select pl.Name, pla.place,sum(t2.prize1),count(t2.name) 
    from players pl 
    inner join places pla on pl.id = pla.PlayerId
    inner join tournaments2 t2 on pla.tournamentId = t2.id 
    where pla.place = 1 
    group by pl.name
) union (
    select pl.Name, pla.place,sum(t2.prize2),count(t2.name) 
    from players pl 
    inner join places pla on pl.id = pla.PlayerId
    inner join tournaments2 t2 on pla.tournamentId = t2.id 
    where pla.place = 2 group by pl.name
) union (
    select pl.Name, pla.place,sum(t2.prize3),count(t2.name) 
    from players pl 
    inner join places pla on pl.id = pla.PlayerId
    inner join tournaments2 t2 on pla.tournamentId = t2.id 
    where pla.place = 3 group by pl.name
)

结果:

 Name       place  gold     placecount
"player1"   "1"   "1500"    "2"
"player2"   "1"   "500"     "1"
"player1"   "2"   "300"     "1"
"player1"   "3"   "200"     "1"

所需的数据表示形式:

 name     gold1stplace 1stplacecount gold2ndplace 2ndplacecount gold3rdplace 3rdplacecount
"player1"    "1500"             "3"         "300"         "1"         "200" "1"

如何获得所需的数据表示形式?

应该可以使用条件聚合来解决此问题

SELECT
    p.name player,
    SUM(CASE WHEN pc.place = 1 THEN t.prize1 ELSE 0 END) gold1stplace,
    SUM(CASE WHEN pc.place = 1 THEN 1        ELSE 0 END) place1stcount,
    SUM(CASE WHEN pc.place = 2 THEN t.prize2 ELSE 0 END) gold2ndplace,
    SUM(CASE WHEN pc.place = 2 THEN 1        ELSE 0 END) place2ndcount,
    SUM(CASE WHEN pc.place = 3 THEN t.prize3 ELSE 0 END) gold3rdplace,
    SUM(CASE WHEN pc.place = 3 THEN 1        ELSE 0 END) place3rdcount
FROM 
    players p
    INNER JOIN places pc ON pc.playerId = p.id
    INNER JOIN tournaments t ON t.id = pc.tournamentId
GROUP BY p.name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM