mysql - 如何增加输出表中的列数以显示更多详细信息

标签 mysql sql

我有 3 个列标题,分别是 account_id、game_date 和 queue_type。我必须显示每个 queue_type 一个帐户玩了多少场比赛。 Atm 我能够显示每个帐户在设定时间段内玩的游戏总数,但我如何才能深入了解总数,而不是显示队列类型的列而不是总数?

SELECT account_id, COUNT(*) as GamesPlayed FROM Games
WHERE DATE (game_date) BETWEEN '2012-01-01' AND '2013-01-01'
GROUP BY account_id
HAVING COUNT(account_id) > 2;

这给了我两列,帐户 ID,然后是它旁边玩过的游戏总数,但是我希望在顶部玩过的游戏类型作为列标题,而不是总数。一共有4种游戏类型。

最佳答案

这称为条件聚合。您可以计算不同的类型并为它们分配所需的列名。 (根据您的数据更改 queue_type 值)

SELECT account_id
,COUNT(case when queue_type = 'A' THEN 1 END) as A
,COUNT(case when queue_type = 'B' THEN 1 END) as B
,COUNT(case when queue_type = 'C' THEN 1 END) as C
,COUNT(case when queue_type = 'D' THEN 1 END) as D
FROM Games
WHERE game_date >= '2012-01-01' AND game_date <='2013-01-01'
GROUP BY account_id

或者更简单的说

SELECT account_id
,SUM(queue_type = 'A') as A
,SUM(queue_type = 'B') as B
,SUM(queue_type = 'C') as C
,SUM(queue_type = 'D') as D
FROM Games
WHERE game_date >= '2012-01-01' AND game_date <='2013-01-01'
GROUP BY account_id

关于mysql - 如何增加输出表中的列数以显示更多详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41896340/

相关文章:

sql - MySQL 到 PostgreSQL : GROUP BY issues

php - 如何添加 case 语句以在每条记录后添加 break?

java - 在 MySql 中使用 c3p0 和 hibernate 的连接太多

java - 通过jsp页面将表单数据插入到数据库中两个不同的表中

MySQL 从两个数据库表中获取最新条目

sql - 来自同一个表的两个sql查询的总和结果

php - 对 MySql 数据库关系实现企业约束

sql - Golang 的 SQL 包是否无法进行即席/探索性查询?

sql - Oracle 存储过程中的事务如何工作?是否存在隐式交易?

php - Codeigniter - 逻辑