2013-10-02 2 views
3

Это моя таблица результатов:MYSQL Граф Ряды Где Max

+------------+--------+--------+ 
| tournament | player | Points | 
+------------+--------+--------+ 
| 1   | Bob | 9  | 
| 1   | Jeff | 2  | 
| 1   | Steve | 1  | 
| 2   | Bob | 5  | 
| 2   | Jeff | 3  | 
| 2   | Steve | 8  | 
| 2   | Paul | 4  | 
| 3   | Bob | 9  | 
| 3   | Jeff | 3  | 
| 3   | Steve | 2  | 
+------------+--------+--------+ 

Я хочу, чтобы узнать, сколько раз игрок выиграл турнир. Поэтому я должен вернуть эти результаты:

Bob: 2 
Steve: 1 
Jeff: 0 
Paul: 0 

Как бы это сделать?

+2

первый запрос выигранные турниры, а затем запросить счет, сгруппированные по игрок. – AntoineLev

+2

Нет, все не так просто. Поэтому я думаю, что на самом деле нет оснований голосовать за закрытие! – fancyPants

ответ

4

Здесь вы идете (прочитать комментарии изнутри наружу):

select /*3. and finally we left join the original table to get all names and display the number of wins again*/ 
outerq.player, 
coalesce(subq.wins, 0) as wins 
from 
Table1 outerq 
left join (
    select /*2. Now we determine how much tournaments each player won*/ 
    ot.player, 
    count(*) as wins 
    from (
    select /*1. First we determine the winners per tournament here*/ 
    * 
    from 
    Table1 t 
    where Points = (select max(Points) from Table1 st where st.tournament = t.tournament) 
) ot 
group by ot.player 
) subq on outerq.player = subq.player 
group by outerq.player 
order by wins desc 
  • увидеть его работы вживую в sqlfiddle
Смежные вопросы