我有一个包含 3 列的奖品表:
| event_id | place | money |
我正在尝试让结果以 event_id 出现,以及一等奖、二等奖和三等奖。
到目前为止我已经试过了:
SELECT event_id, (SELECT money AS first FROM prize WHERE place = 1)
FROM prize
但我收到子查询返回多于 1 行的错误。
最佳答案
如果您非常确定每个事件和地点组合只有一个条目,您还可以结合使用 SUM
和 IF
函数:
SELECT event_id
,SUM(IF(place=1, money, 0)) As 'FirstPlace'
,SUM(IF(place=2, money, 0)) As 'SecondPlace'
,SUM(IF(place=3, money, 0)) As 'ThirdPlace'
FROM prize
GROUP BY event_id;
IF
function用于确保返回正确地点的正确金额。 (它检查第一个表达式是否为真,如果第一个表达式为真则返回第二个表达式,如果第一个表达式为假则返回第三个表达式。)
查看此 SQL Fiddle (改编自 McAdam331's answer)。
关于mysql - 为每个事件显示多个类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791838/