从 SQL 数据库 table 中获取重复对、三元组、四元组等?
Get repeating pairs, triples, quadruples and so on from an SQL database table?
我有一张 table 来自波兰 Lotto Multi Multi 20/80 的图纸历史记录。因此,每行包含 20 列,数字范围为 1 到 80,行内没有重复数字。
在最后一次开奖中,有几张牌同时出现了 80 和 77(查看图片 link),但在 SQL 结果上似乎没有任何 80 或什至77 个数字,最大的是 nr2 列上的 63 个(查看图片 link 了解详情)。
我正在尝试这段 SQL 查询代码,但似乎它并没有 "catch" 所有列,而是检查最大列号 10(在这种情况下最大列数为 63)并且它不会进一步到第 20 列(其中存储的最大可能数为 80)。
这是我使用的完整 SQL 查询代码:
CREATE TABLE IF NOT EXISTS unpivot AS
SELECT *
FROM (
SELECT DrawId, N1 as n_value FROM draws union all
SELECT DrawId, N2 as n_value FROM draws union all
SELECT DrawId, N3 as n_value FROM draws union all
SELECT DrawId, N4 as n_value FROM draws union all
SELECT DrawId, N5 as n_value FROM draws union all
SELECT DrawId, N6 as n_value FROM draws union all
SELECT DrawId, N7 as n_value FROM draws union all
SELECT DrawId, N8 as n_value FROM draws union all
SELECT DrawId, N9 as n_value FROM draws union all
SELECT DrawId, N10 as n_value FROM draws union all
SELECT DrawId, N11 as n_value FROM draws union all
SELECT DrawId, N12 as n_value FROM draws union all
SELECT DrawId, N13 as n_value FROM draws union all
SELECT DrawId, N14 as n_value FROM draws union all
SELECT DrawId, N15 as n_value FROM draws union all
SELECT DrawId, N16 as n_value FROM draws union all
SELECT DrawId, N17 as n_value FROM draws union all
SELECT DrawId, N18 as n_value FROM draws union all
SELECT DrawId, N19 as n_value FROM draws union all
SELECT DrawId, N20 as n_value FROM draws
) as T;
SELECT nr1, nr2, count(*) as total
FROM
(
SELECT up1.n_value as nr1, up2.n_value as nr2
FROM unpivot up1
JOIN unpivot up2
ON up1.DrawId = up2.DrawId
AND up1.n_value < up2.n_value
) T
GROUP BY nr1, nr2
ORDER BY nr2 desc;
-- LIMIT 300;
Repeating pairs into the database
Query results
我怀疑问题是:
CREATE TABLE IF NOT EXISTS unpivot AS . . .
也就是说,您有旧版本的 table 并且没有创建新版本。
相反,执行:
DROP TABLE IF EXISTS unpivot;
然后:
CREATE TABLE unpivot AS . . .
我有一张 table 来自波兰 Lotto Multi Multi 20/80 的图纸历史记录。因此,每行包含 20 列,数字范围为 1 到 80,行内没有重复数字。
在最后一次开奖中,有几张牌同时出现了 80 和 77(查看图片 link),但在 SQL 结果上似乎没有任何 80 或什至77 个数字,最大的是 nr2 列上的 63 个(查看图片 link 了解详情)。 我正在尝试这段 SQL 查询代码,但似乎它并没有 "catch" 所有列,而是检查最大列号 10(在这种情况下最大列数为 63)并且它不会进一步到第 20 列(其中存储的最大可能数为 80)。
这是我使用的完整 SQL 查询代码:
CREATE TABLE IF NOT EXISTS unpivot AS
SELECT *
FROM (
SELECT DrawId, N1 as n_value FROM draws union all
SELECT DrawId, N2 as n_value FROM draws union all
SELECT DrawId, N3 as n_value FROM draws union all
SELECT DrawId, N4 as n_value FROM draws union all
SELECT DrawId, N5 as n_value FROM draws union all
SELECT DrawId, N6 as n_value FROM draws union all
SELECT DrawId, N7 as n_value FROM draws union all
SELECT DrawId, N8 as n_value FROM draws union all
SELECT DrawId, N9 as n_value FROM draws union all
SELECT DrawId, N10 as n_value FROM draws union all
SELECT DrawId, N11 as n_value FROM draws union all
SELECT DrawId, N12 as n_value FROM draws union all
SELECT DrawId, N13 as n_value FROM draws union all
SELECT DrawId, N14 as n_value FROM draws union all
SELECT DrawId, N15 as n_value FROM draws union all
SELECT DrawId, N16 as n_value FROM draws union all
SELECT DrawId, N17 as n_value FROM draws union all
SELECT DrawId, N18 as n_value FROM draws union all
SELECT DrawId, N19 as n_value FROM draws union all
SELECT DrawId, N20 as n_value FROM draws
) as T;
SELECT nr1, nr2, count(*) as total
FROM
(
SELECT up1.n_value as nr1, up2.n_value as nr2
FROM unpivot up1
JOIN unpivot up2
ON up1.DrawId = up2.DrawId
AND up1.n_value < up2.n_value
) T
GROUP BY nr1, nr2
ORDER BY nr2 desc;
-- LIMIT 300;
Repeating pairs into the database
Query results
我怀疑问题是:
CREATE TABLE IF NOT EXISTS unpivot AS . . .
也就是说,您有旧版本的 table 并且没有创建新版本。
相反,执行:
DROP TABLE IF EXISTS unpivot;
然后:
CREATE TABLE unpivot AS . . .