mysql - 如何将行作为标题然后计算填充的数据
问题描述
我正在尝试计算所有状态为已签出的行,但我只能按行填充它,然后动态计算它。
我怎样才能让我的行作为标题,然后计算状态?
我需要将宿舍名称行作为列标题,然后作为行签出。
询问 :
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。
推荐阅读
- android - 我应该停止并重新创建线程还是应该在 Android 中使用 wait() 和 notify() 来处理游戏循环?
- gcloud - GSUTIL CP 使用文件大小
- vba - MS Access 中的列表框多选
- laravel - 在配置文件中运行 DB::select
- html - 二级页面(例如小说中的章节、长篇文章中的部分等)的正确 h1/h2 标记是什么?
- python - 遍历嵌套列表以附加网络抓取结果
- java - “邮箱不存在。” 在 EWS 上获取电子邮件时
- ios - 模块“Razorpay”在 swift 中没有名为“initWithKey”的成员
- java - jdeps 因并发执行异常而失败
- reactjs - React - 从选择/下拉列表中导入组件