首页 > 数据库 > mysql教程 > 如何在 SQL 中将行转换为列以获取用户响应?

如何在 SQL 中将行转换为列以获取用户响应?

Linda Hamilton
发布: 2025-01-05 17:01:42
原创
910 人浏览过

How to Pivot Rows into Columns in SQL for User Responses?

SQL 将行转置为列

在 SQL 中将行转置为列是一种允许您转换具有面向行数据的表的技术到具有面向列的数据的表中。这种技术通常称为数据透视。

在您的特定场景中,您有两个表:

  • 响应:包含用户对问题的响应。
  • 问题:包含实际情况问题。

您的目标是调换“响应”表,以便每个用户对不同问题的回答显示为列,而不是行。

逐步-步骤解决方案:

要实现所需的转置,可以使用连接和条件的组合聚合:

SELECT r.user_id,
       MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?",
       MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?",
       MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?"
FROM responses r
JOIN questions q ON q.id = r.question_id
GROUP BY r.user_id;
登录后复制

解释:

  • 查询首先连接“question_id”列上的“responses”和“questions”表,该列链接每个对其相应问题的回答。
  • 然后使用 MAX() 函数的条件聚合来检索每个用户和问题组合的最大响应值。
  • CASE 语句检查问题 ID,如果与 ID 匹配,则返回响应正文。
  • 最后,GROUP BY 子句按以下方式对结果进行分组用户 ID,确保每个用户的响应聚合在一起。

示例结果:

user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
-------- | ------------------ | ------------------- | -------------------
1       | Yes                 | Yes                  | No
2       | Yes                 | No                   | No
登录后复制

以上是如何在 SQL 中将行转换为列以获取用户响应?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板