2016-12-21 2 views
0

У меня есть два запроса с разными предложениями, и мне нужно присоединиться к запросу, чтобы получить единую таблицу результатов.Присоединение нескольких запросов select SQL

Первый запрос:

SELECT 
    players.id,player_name,count(matches.winner) as wintotal 
FROM 
    matches, players 
WHERE 
    matches.winner = players.id 
GROUP BY 
    players.id; 

возвращает эти результаты:

id | player_name |  wintotal 
45 | Vijay  |  2 
43 | Rahul  |  1 
46 | Shinoy  |  1 
48 | Sunil  |  2 
44 | Adarsh  |  4 

Второй запрос:

SELECT 
    players.id, player_name, count(*) as totalgames 
FROM 
    matches, players 
WHERE 
    matches.winner = players.id or matches.loser = players.id 
GROUP BY 
    players.id; 

Возвраты:

id | player_name |   Total Matches 
45 | Vijay  |   4 
43 | Rahul  |   2 
46 | Shinoy  |   4 
48 | Sunil  |   2 
44 | Adarsh  |   6 
47 | Pranjal  |   2 

В этих двух запросах предложение where отличается для обоих запросов, а последний столбец отличается.

  • Первый запрос возвращает общее количество побед игроков
  • Второй запрос возвращает общее количество матчей, сыгранных игроком

Как я могу присоединиться как запросы, чтобы получить обе колонки побед и всего совпадений в одном запросе?

Ожидаемый результат:

id | player_name |   Total Matches | wintotal 
45 | Vijay  |   4   |   2 
43 | Rahul  |   2   |   1 
46 | Shinoy  |   4   |   1 
48 | Sunil  |   2   |   2 
44 | Adarsh  |   6   |   4 
47 | Pranjal  |   2   |   0 

Благодаря

+0

[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

ответ

2

попробовать:

select players.id, 
     player_name, 
     count(case when matches.winner=players.id then 1 end) as wintotal , 
     count(*) as totalgames 
from matches 
join players 
on matches.winner=players.id or matches.loser=players.id 
group by players.id, 
     player_name; 
0

Проверьте Это.

  select id , player_name ,Total_Matches , wintotal 

      (
      select players.id,player_name,count(matches.winner) as wintotal from matches,players where matches.winner=players.id 
      group by players.id 
      ) A, 

      (
      select players.id,player_name,count(*) as Total_Matches from matches,players where matches.winner=players.id or 
      matches.loser=players.id 
      group by players.id 
      ) B 

      where A.id=B.ID 
Смежные вопросы