我有一列,其中值是逗号分隔的不同表中2个其他字段的组合。该列如下所示:
col1 col2 col3
1 A,B 100
2 A,C 200
3 B,A 300
4 D,F 400
5 C,A 100
6 F,E 200
7 F,D 10000
当我在col2级别聚合时,我分别得到A,B & B,A
,问题是A,B = B,A。我如何创建第四列,将其简单标记为A,B or B,A
。只要它们一致就可以。
答案 0 :(得分:4)
这可能是一个可怕的数据结构。您不应将值存储在以逗号分隔的列表中。如果始终总是有两个值,则可以使用两列。或者,您可以使用联结/关联表。
我建议将值分为两列:
select t.*,
least(substring_index(col2, ',', 1), substring_index(col2, ',', -1)) as col2_1,
greatest(substring_index(col2, ',', 1), substring_index(col2, ',', -1)) as col2_2
from t;
新列col2_1
和col2_2
按规范排序,因此反转原始值无关紧要。