SQL 子查询 - 列出数据

SQL Sub Queries - Listing data

希望我写的标题合适。

到目前为止我只有:

SELECT event_id
FROM prize
WHERE place <= 3

问题如下: 对于每个项目,在一行中列出一等奖、二等奖和三等奖的奖金。

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

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

table奖品信息如下:

+ ------------- + ---------- + ---------- +
| 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

感谢任何帮助

我们可以使用条件聚合函数将您的行转换为列。

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