gpt4 book ai didi

SQL 查询 - 将数据值转换为属性到另一个表中。

转载 作者:行者123 更新时间:2023-12-04 23:43:03 25 4
gpt4 key购买 nike

我正在构建报告,但在制定查询时卡住了。大量连接后,我从多个表中获取以下数据。

ID        TYPE    RATING
----- ---- ------
ID_R1 A 1
ID_R1 B 3
ID_R2 A 2
ID_R2 B 1
ID_R3 A 4
ID_R3 B 4
ID_R4 A 2
ID_R4 B 3
ID_R5 A 2
ID_R5 B 3

实际发生的是每个 ID 都会有一个类型 A 和 B 的评级所以我需要做的是将上面的转换成下面的

ID       Type_A_Rating    Type_B_Rating
----- ------------- -------------
ID_R1 1 3
ID_R2 3 1
ID_R3 4 4
ID_R4 2 3
ID_R5 2 3

我已经考虑过分组依据和不同的技术,但到目前为止我无法提出解决方案。需要帮助F1! F1!

p.s 只是为了记录,我的最终游戏是计算 (A,B) 组合

Type_A_Rating    Type_B_Rating    Count
------------- ------------- -----
1 1 0
1 2 0
1 3 1
1 4 0
2 1 0
2 2 0
2 3 2
2 4 0
3 1 1
3 2 0
3 3 0
3 4 0
4 1 0
4 2 0
4 3 0
4 4 1

从这里你可以看到,一个简单的 GROUP BY 具有任何形式的 AND OR 条件是不够的,直到我得到数据作为提及。我可以使用两个中间/临时表,在一个中使用 ID 获取 Type_A_Rating,然后在第二个中使用 ID 获取 Type_B_Rating,然后在另一个中将两者结合使用,但没有更好的方法。

最佳答案

这应该作为与 SQL 引擎无关的解决方案(前提是每个 ID 恰好有一行类型 A 和一行类型 B):

select
TA.ID,
TA.RATING as Type_A_Rating,
TB.RATING as Type_B_Rating
from
(select ID, RATING
from T where TYPE = 'A') as TA
inner join
(select ID, RATING
from T where TYPE = 'B') as TB
on TA.ID = TB.ID

相关 SQL fiddle :http://sqlfiddle.com/#!9/7e6fd9/2

替代(更简单)的解决方案:

select
ID,
sum(case when TYPE = 'A' then RATING else 0 end) as Type_A_Rating,
sum(case when TYPE = 'B' then RATING else 0 end) as Type_B_Rating
from
T
group by
ID

fiddle :http://sqlfiddle.com/#!9/7e6fd9/3

编辑:

上面的是正确的,但都可以稍微简化一下:

select TA.ID, TA.RATING as Type_A_Rating, TB.RATING as Type_B_Rating
from T TA join
T TB
on TA.ID = TB.ID AND A.type = 'A' and B.type = 'B';

并且(因为在没有匹配项时我更喜欢 NULL:

select ID,
max(case when TYPE = 'A' then RATING end) as Type_A_Rating,
max(case when TYPE = 'B' then RATING end) as Type_B_Rating
from T
group by ID

关于SQL 查询 - 将数据值转换为属性到另一个表中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060306/

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