所以我有一个看起来像这样的表:(称为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


我正在尝试回答这个问题:
对于每个事件,在一行上列出可用于第一,第二和第三名的奖金。按event_id分组。

例如。将会出现一行结果:

Event_id   First   Second   Third
101         120      60      30


到目前为止,我已经做到了:

SELECT Event_id, Money AS 'First'
FROM PRIZE
WHERE Place = '1'
GROUP BY Event_id;


但是在问题的“第二”和“第三”部分添加SQL确实很麻烦。

有人可以帮忙吗?

谢谢!!

最佳答案

为什么不使用多个联接只执行一个选择语句,而不是对子查询执行多个选择?

SELECT tb.event_id,
       tb1.money AS first,
       tb2.money AS second,
       tb3.money AS third
  FROM prize tb
       INNER JOIN prize tb1 ON tb1.event_id = tb.event_id AND tb1.place = 1
       INNER JOIN prize tb2 ON tb2.event_id = tb.event_id AND tb2.place = 2
       INNER JOIN prize tb3 ON tb3.event_id = tb.event_id AND tb3.place = 3
GROUP BY tb.event_id;

关于mysql - 协助SQL子查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32115701/

10-11 17:54