创建几个列的大小为2的所有集

时间:2016-10-13 12:09:23

标签: sql mariadb

我正在使用Maria DB 10.1.16,我正在寻找几个列中最常出现的第2组。

示例数据库:

ID |  Col 1 | Col 2 | Col 3 | Result ID | EXPECTED RESULT
1       1       0       2        1         "Col 1/ Col 3"        
2       1       0       0    No Results
3       1       1       3        3         "Col 1/ Col 2"
                                 3         "Col 1/ Col 3"
                                 3         "Col 2/ Col 3"

通过这个新专栏,我只需要Count和GroupBy来接收发生这种情况的频率。

我不太确定转移它的优雅方式。基线解决方案是检查所有可能集合存在的每一行:

SELECT *,"Col 1/ Col 2" AS FreqSet 
FROM `Table` 
WHERE Col 1 >0 AND Col 2 >0

UNION SELECT *,"Col 1/ Col 3" AS FreqSet 
FROM `Table` 
WHERE Col 1 >0 AND Col 3 >0

UNION SELECT *,"Col 2/ Col 3" AS FreqSet 
FROM `Table` 
WHERE Col 2 >0 AND Col 3 >0
Order By ID

但是,由于我想要为总共8列执行此操作,结果将是28个SELECT语句以涵盖所有组合。所以我希望有更好的解决方案^^。

旁注我还有另一个视图,其中包含一列中的所有条目> 0,如下所示:

ID ColTotal
1     Col1
1     Col3
2     Col1
3     Col1
3     Col2
3     Col3

也许某人有更好的队列来查看该视图。我希望我已经涵盖了一切?

提前感谢您的任何提示! 问候Hasorko

1 个答案:

答案 0 :(得分:0)

您的观点更有用。这只是join

select distinct v1.id, concat(v1.col, '/', v2.col) 
from v v1 join
     v v2
     on v1.id = v2.id and v1.col < v2.col;