数据库多选

时间:2016-12-03 20:04:32

标签: sql postgresql

我有以下两个表格:

球员

  id name
  p1  name1
  p2  name2
  p3  name3
  p4  name4

匹配

  id winner loser
  m1   p1    p2
  m2   p3    p4

我想要的是编写一个返回以下内容的select语句:

  id  name  matches wins
  p1 name1   1      1
  p3 name3   1      1
  p2 name2   1      0
  p4 name4   1      0

这基本上是为了返回锦标赛排名,按胜利次数排序。

3 个答案:

答案 0 :(得分:0)

一种方法使用相关子查询:

select p.*,
       (select count(*) from matches m where p.id in (m.winner, m.loser)
       ) as matches,
       (select count(*) from matches m where p.id = m.winner
       ) as wins
from players p
order by wins desc;

答案 1 :(得分:0)

您可以向Players表添加2列或创建名为Tournament的新表。您可以在管理面板上手动(手动)注册锦标赛玩家。 如果要向Players表添加2列。 U将查询玩家获胜分数,查询后获取您的MySQL行数功能,您将获得很多赢得玩家。在writenitnto锦标赛页面之后。 (注意:抱歉英语不好,我想说英语。请尝试了解我。)

答案 2 :(得分:0)

另一种方法是使用两个外连接:

select p.id, 
       p.name,
       count(distinct m.id) as matches,
       count(distinct w.id) as wins
from players p
  left join matches m on p.id in (m.winner, m.loser)
  left join matches w on w.winner = p.id
group by p.id, p.name
order by wins desc, p.name