mysql - 为每个事件显示多个类别

标签 mysql subquery

我有一个包含 3 列的奖品表:

| event_id | place | money |

我正在尝试让结果以 event_id 出现,以及一等奖、二等奖和三等奖。

到目前为止我已经试过了:

SELECT event_id, (SELECT money AS first FROM prize WHERE place = 1)
FROM prize

但我收到子查询返回多于 1 行的错误。

最佳答案

如果您非常确定每个事件和地点组合只有一个条目,您还可以结合使用 SUMIF 函数:

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/

相关文章:

mysql - 如何改善 ColdFusion MySQL 查询时间?

带有逗号分隔结果集的sql server子查询

MySQL 左连接子查询失败

mysql - 子查询中的限制

mysql - 从 ID 列返回重复 ID 的计数

mysql - 将 MySQL 数据库中的表读入 R

php - 如何从 MySql 数据库中的字段末尾删除字符

php - 使用 PDO 数据库类而不每次都创建新连接?

mysql - 第 2 行 SQL 语法错误

mysql - 从子查询中选择前n个