2014-11-19 2 views
0

Мне нужно использовать подзапросы SQL, чтобы ответить на следующие вопросы.показать первый, второй и третий приз в одной строке

оригинальная таблица приз

event_id place  money 
101   1   120 
101   2   60 
101   3   30 
102   1   10 
102   2   5 
102   3   2 
103   1   100 
103   2   60 
103   3   40 
401   1   1000 
401   2   500 
401   3   250 
401   4   100 
401   5   50 

вопрос: для каждого события, список призовых денег, доступных для первого, второго и третьего приза в одной строке. заказываем event_id. в первой строке таблицы, как: event_id первый второй третий .....

Мой ответ здесь: USE horsedb;

SELECT event_id, 
(SELECT money FROM prize WHERE place = '1' AND event_id = prize.event_id) AS 'First', 
(SELECT money FROM prize WHERE place = '2' AND event_id = prize.event_id) AS 'Second', 
(SELECT money FROM prize WHERE place = '3' AND event_id = prize.event_id) AS 'Third' 
FROM prize 
ORDER BY event_id; 

, но ответ имеет ошибку 1024 (возврат более одной строки). и я попробовал IN, ЛЮБОЙ результат не годится.
пожалуйста, помогите, спасибо

ответ

0

Вот запрос:

select event_id, 
     max(first) as first, 
     max(second) as second, 
     max(third) as third 
    from (select event_id, 
       case when place = 1 then money else null end as first, 
       case when place = 2 then money else null end as second, 
       case when place = 3 then money else null end as third 
      from prize 
     )t 
group by event_id; 

И sqlfiddle, если вам это нужно: http://sqlfiddle.com/#!2/aa691/1/0

0

вопрос не ясно, с точки зрения того, что результат должен выглядеть, но вот предложение: Попробуйте использовать GROUP BY и GROUP_CONCAT. Пример:

SELECT event_id, 
     GROUP_CONCAT(place ORDER BY place) AS place, 
     GROUP_CONCAT(money ORDER BY place) AS money 
FROM prize 
GROUP BY event_id; 

дает:

+----------+-----------+---------------------+ 
| event_id | place  | money    | 
+----------+-----------+---------------------+ 
|  101 | 1,2,3  | 120,60,30   | 
|  102 | 1,2,3  | 10,5,2    | 
|  103 | 1,2,3  | 100,60,40   | 
|  401 | 1,2,3,4,5 | 1000,500,250,100,50 | 
+----------+-----------+---------------------+ 
Смежные вопросы