mysql - 如何将行作为标题然后计算填充的数据

标签 mysql sql select

我正在尝试计算所有状态为已 checkout 的行, 但我只能做的是按行填充它然后动态计数。

如何将我的行作为标题,然后计算之后的状态?

我需要将宿舍名称行作为列标题 然后按行 checkout 。

查询:

SELECT  Room_Number as 'Room Number',Dorm_Name as 'Dorm Name',
 COUNT(IF(action = 'Checked Out' , 1, NULL)) 'Checked Out'  FROM billeting_history group by dorm_name;


+-----------+-------------+-------------+ 
| Dorm Name | Room_number | Checked Out |
+-----------+-------------+-------------+ 
| Arquitola |         205 |           1 |
| Hangar    |         201 |           0 |
| Noble     |         200 |           0 |
+-----------+-------------+-------------+ 

Desired output :

+-------------+-----------+--------+-------+ 
| Room Number | Arquitola | Hangar | Noble |
+-------------+-----------+--------+-------+
|         205 |         1 |      0 |     0 |
|         201 |         0 |      0 |     0 |
|         200 |         0 |      0 |     0 |
+-------------+-----------+--------+-------+

最佳答案

如果您知道所需的特定列,则可以使用条件聚合:

SELECT Room_Number, 
       SUM( CASE WHEN Dorm_Name = 'Arquitola' THEN checked_out ELSE 0 END ) as Arquitola,
       SUM( CASE WHEN Dorm_Name = 'Hangar' THEN checked_out ELSE 0 END ) as Hangar,
       SUM( CASE WHEN Dorm_Name = 'Noble' THEN checked_out ELSE 0 END ) as Noble
FROM billeting_history 
GROUP BY Room_Number;

如果您不知道完整的名称列表,那么您需要使用动态 SQL。

关于mysql - 如何将行作为标题然后计算填充的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54649752/

相关文章:

mysql left join subselect

python - 使用 Python 从 MySQLdb 中提取条目

select - 将多个字段连接到一个表

mysql - 在2个以上具有不同数据的表中进行全文搜索

mysql - 获取表的ID并存储在变量中

Mysql 与 MongoDB 和 DynamoDB - 用户跟踪项目

sql-server-2008 - 在 SQL View 中嵌入查询和子查询(以小时和分钟为单位的差异时间)

c# - 通过 ADO.NET 调用存储过程来填充 List<int> 的最有效方法

mysql - 如何在 MySQL 中仅对一列应用 DISTINCT 选择器

c# - 使用 SQL 地理字段初始化 .NET DbGeography 对象