gpt4 book ai didi

SQL 将行转置为列

转载 作者:行者123 更新时间:2023-11-29 11:06:39 25 4
gpt4 key购买 nike

我有一个有趣的难题,我相信它可以用纯 SQL 解决。我有类似于以下的表格:

responses:

user_id | question_id | body
----------------------------
1 | 1 | Yes
2 | 1 | Yes
1 | 2 | Yes
2 | 2 | No
1 | 3 | No
2 | 3 | No


questions:

id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?

我想得到以下输出

user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1 | Yes | Yes | No
2 | Yes | No | No

我不知道会有多少问题,而且它们会是动态的,所以我不能只为每个问题编写代码。我正在使用 PostgreSQL,我相信这称为换位,但我似乎找不到任何说明在 SQL 中执行此操作的标准方法的内容。我记得在大学的数据库课上做过这件事,但那是在 MySQL 中,老实说,我不记得我们是怎么做到的。

我假设它将是联接和 GROUP BY 语句的组合,但我什至不知道如何开始。

有人知道怎么做吗?非常感谢!

编辑 1: 我找到了一些关于使用 crosstab 的信息这似乎是我想要的,但我无法理解它。非常感谢指向更好文章的链接!

最佳答案

使用:

  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

这是一个标准的数据透视查询,因为您将数据从行“透视”到列数据。

关于SQL 将行转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com