2014-05-01 125 views
0

我正在尝试使用4个查询并获取一个结果表。我尝试过UNION和JOIN,但无法做到这一点。如果这里有人可能知道解决方案,我会非常感激。下面是我操作的表格,我正在使用的查询以及我得到的结果。PSQL:结合/将多个查询结果合并到一个表中

- 表

   Table "public.games" 
    Column |   Type   | Modifiers 
-----------+-----------------------+----------- 
gamedate | date     | not null 
hometeam | character varying(50) | not null 
awayteam | character varying(50) | not null 
homescore | character varying(50) | 
awayscore | character varying(50) | 
Indexes: 
    "date_teams" PRIMARY KEY, btree (gamedate, hometeam, awayteam) 

- 查询

-- Display teams and their total number of wins and losses 

SELECT homeTeam, count(*) AS Wins 
FROM games 
WHERE homeScore > awayScore 
GROUP BY homeTeam; 

SELECT homeTeam, count(*) AS Losses 
FROM games 
WHERE homeScore < awayScore 
GROUP BY homeTeam; 

SELECT awayTeam, count(*) AS Wins 
FROM games 
WHERE homeScore < awayScore 
GROUP BY awayTeam; 

SELECT awayTeam, count(*) AS Losses 
FROM games 
WHERE homeScore > awayScore 
GROUP BY awayTeam; 

- 结果

hometeam | wins 
------------+------ 
Destroyers | 1 
Animals | 2 
Powerpuff | 1 
Madinights | 1 
(4 rows) 


hometeam | losses 
----------+-------- 
Aliens |  1 
Animals |  1 
(2 rows) 


awayteam | wins 
----------+------ 
Steel | 1 
America | 1 
(2 rows) 


awayteam | losses 
----------+-------- 
Knights |  1 
Bengals |  1 
Fairies |  1 
Beakers |  2 
(4 rows) 

我怎么能把这四张桌子合并为一个,团队名称从不重复?

事情是这样的:

团队|赢得|损失

----------- + ------ + -----

Knights | 0 | 1

动物| 2 | 1

一个表格总结了每个团队的胜利和失败,'家'和'走'是不希望的。

+0

你能显示你想要的输出?主场的不同列胜和赢,或? – harmic

+0

嗨harmic,像这样的东西:团队|赢得|损失 ---------- + -------- Knights | 0 | 1 *一个表格总结了每个球队的胜利和损失,'家'和'客场'是不希望的* – user1945077

+0

请使用代码格式化模块让您的表更具可读性。请参阅我之前对您的问题所做的修改。 – harmic

回答

0

尝试:

SELECT team, 
     SUM(Wins) As Wins, 
     SUM(Losses) As Losses 
FROM (
    SELECT homeTeam As team, 
      SUM(case when homeScore > awayScore then 1 else 0 end) AS Wins, 
      SUM(case when homeScore < awayScore then 1 else 0 end) AS Losses 
    FROM games 
    GROUP BY homeTeam 
    UNION ALL 
    SELECT awayTeam, 
      SUM(case when homeScore < awayScore then 1 else 0 end) AS Wins, 
      SUM(case when homeScore > awayScore then 1 else 0 end) AS Losses 
    FROM games 
    GROUP BY awayTeam 
) q 
GROUP BY team 

演示:http://sqlfiddle.com/#!15/3db10/11


一个备注:
您使用<>运营商在查询 - 这还不包括案件时awayscore=homescore

+0

这工作很好。非常感谢你。 'else 0'对于填充缺少的数据很有用,我更好地理解我应该如何使用UNION。 – user1945077

相关问题