SQL子查询 - 列出数据

时间:2015-04-30 08:10:49

标签: mysql sql workbench

希望我已经恰当地写了这个标题。

到目前为止我只有:

SELECT event_id
FROM prize
WHERE place <= 3

问题如下: 对于每个活动,在一行上列出可获得一等奖,二等奖和三等奖的奖金。

所以我需要列出PRIZE表中的EVENT_ID。然后将有三个单独的列显示第一,第二和第三奖。预期数据如下:

| event_id | First | Second | Third |
|    101   |  120  |   60   |   30  | 
|    102   |  10   |   5    |   2   | 
|    103   |  100  |   60   |   40  | 
|    401   |  1000 |   500  |  250  | 

表PRIZE具有列出的信息:

+ ------------- + ---------- + ---------- +
| 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         |
| NULL          | NULL       | NULL       |
+ ------------- + ---------- + ---------- +
15 rows

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

我们可以使用条件聚合函数将行转移到列中。

select event_id, 
       max(case when place = 1 then money end) first,
       max(case when place = 2 then money end) second,
       max(case when place = 3 then money end) third
  from prize
    where event_id is not null
  group by event_id

demo here