假设有一个包含三列和一百万行的表。如何编写一条 SQL 语句,其中包含 20.000 行,但有列(第二列)永远不会具有相同值的限制?
假设这是桌子:
名称 - bpchar(17) | 生日 - 约会 | 婚礼 - 日期 |
---|---|---|
保罗 | 1990-01-01 | 2010-01-01 |
苏西 | 1995-06-01 | 2020-01-01 |
路易斯 | 1995-06-01 | 2022-06-15 |
现在假设该表中有一百万行。
我现在想要的是:
从表中获取 20,000 行,其中每行在特定列(我们称之为“column2”)中都有唯一值。 首先,我们根据第 2 列中的值为每行指定一个唯一的编号。这确保了 column2 中的每个值都有一个从 1 开始的数字。 在这些编号的行中,我们仅保留第 2 列中每个唯一值的第一行。最后,我们从结果中选择 20,000 行,确保每行在第 2 列中都有唯一的值。
用 SQL 编写:
WITH RankedRows AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY column2 ORDER BY (SELECT NULL)) AS rn FROM your_table), UniqueRows AS (SELECT * FROM RankedRows WHERE rn = 1) SELECT * FROM UniqueRows LIMIT 20000;