创建多个列的所有集合大小 2
Create all sets size 2 of several columns
我正在使用 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
也许有人对该视图有更好的队列。我希望我已经涵盖了所有内容?
感谢您提前提供任何提示!
你好哈索尔科
您的观点更有用。这只是一个 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;
我正在使用 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
也许有人对该视图有更好的队列。我希望我已经涵盖了所有内容?
感谢您提前提供任何提示! 你好哈索尔科
您的观点更有用。这只是一个 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;