SQL - 将行旋转到列并采用笛卡尔积
Posted
技术标签:
【中文标题】SQL - 将行旋转到列并采用笛卡尔积【英文标题】:SQL - Pivot rows to columns and take cartesian product 【发布时间】:2019-01-08 01:06:16 【问题描述】:我正在尝试仅使用 SQL 查询来执行以下操作。我不太确定如何,但认为我应该使用枢轴和交叉连接?
将第一个表,称为entries
,转换为第二个表combined
entries
:
study_id participant condition_1 condition_2 condition_3
1 user_1 true false false
1 user_2 true true false
2 user_2 false false true
combined
:
study_id user_1condition_1 user_1condition_2 user_1condition_3 user_2condition_1 user_2condition_2 user_2condition_3
1 true false false true true false
2 N/A N/A N/A false false true
我们可以看到这实质上是在一个表格中填充字段,这些字段是参与者与条件的笛卡尔积。但我不确定如何制作新表并使用 SQL 查询填充它。
【问题讨论】:
【参考方案1】:您可以选择 group by 以及 MAX 逻辑来获得您想要的结果。
select study_id
,max(case when participant='user_1' then condition_1 end) as user_1condition_1
,max(case when participant='user_1' then condition_2 end) as user_1condition_2
,max(case when participant='user_1' then condition_3 end) as user_1condition_3
from entities
group by study_id
【讨论】:
谢谢,你能解释一下这个查询吗?另外我假设需要为用户 2 重复表达式? 是的,对于其他用户,您可以使用相同的 MAX() 模式。在预期结果中,我们有非重复的 study_id,因此我按 study_id 分组。之后,如果参与者是“user_1”,我将选择性地获取条件值,这让我得到了 user_1condition_1,然后我对 condition_2、_3 等重复此操作以上是关于SQL - 将行旋转到列并采用笛卡尔积的主要内容,如果未能解决你的问题,请参考以下文章
工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)