SQL 求助,得到想要的输出
SQL help, Get the desired output
输入:
+---------+---------+--------+
| row_min | row_max | tCount |
+---------+---------+--------+
| 2 | 4 | 1 |
| 7 | 10 | 2 |
| 13 | 14 | 3 |
+---------+---------+--------+
所需输出:
+-----+--------+
| row | tcount |
+-----+--------+
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 7 | 2 |
| 8 | 2 |
| 9 | 2 |
| 10 | 2 |
| 13 | 3 |
| 14 | 3 |
+-----+--------+
row_min 和 row_max 在输出中扩展,其范围内有相应的 tcount
作为数据转换的一部分,此步骤是必需的,我需要使用 SQL(驻留在 Amazon redshift 中的数据)对数据集进行操作。我被困在这个特定的步骤上。
请提供相同所需的 SQL 代码,希望仅限于使用连接和分析函数。
您可以使用足够大的计数 table 来完成,以包括高达 MAX(row_max)
的 table:
WITH Tally AS (
SELECT ROW_NUMBER() OVER() AS n
FROM (
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) x(n)
CROSS JOIN (
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) y(n)
)
SELECT n, tCount
FROM Tally AS t
INNER JOIN mytable AS m ON t.n >= m.row_min AND t.n <= m.row_max
我认为 Redshift 支持简单的、非递归的 CTE,所以上面的应该可行。
输入:
+---------+---------+--------+ | row_min | row_max | tCount | +---------+---------+--------+ | 2 | 4 | 1 | | 7 | 10 | 2 | | 13 | 14 | 3 | +---------+---------+--------+
所需输出:
+-----+--------+ | row | tcount | +-----+--------+ | 2 | 1 | | 3 | 1 | | 4 | 1 | | 7 | 2 | | 8 | 2 | | 9 | 2 | | 10 | 2 | | 13 | 3 | | 14 | 3 | +-----+--------+
row_min 和 row_max 在输出中扩展,其范围内有相应的 tcount 作为数据转换的一部分,此步骤是必需的,我需要使用 SQL(驻留在 Amazon redshift 中的数据)对数据集进行操作。我被困在这个特定的步骤上。 请提供相同所需的 SQL 代码,希望仅限于使用连接和分析函数。
您可以使用足够大的计数 table 来完成,以包括高达 MAX(row_max)
的 table:
WITH Tally AS (
SELECT ROW_NUMBER() OVER() AS n
FROM (
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) x(n)
CROSS JOIN (
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) y(n)
)
SELECT n, tCount
FROM Tally AS t
INNER JOIN mytable AS m ON t.n >= m.row_min AND t.n <= m.row_max
我认为 Redshift 支持简单的、非递归的 CTE,所以上面的应该可行。