SQL可以用来return分布式样本集吗?
Can SQL be used to return a distributed sample set?
我需要一个示例数据集,主要是为了减少行数,以便可以将示例加载到一个 Excel sheet 中。
我查看了分析函数和这个 Ask Tom post,但我无法获得我需要的结果,主要是因为我看不到我的需求能够利用分析分组。
这是数据的表示形式。每一行都是独一无二的。 Cat_No
是主键。
CAT_NO |PROD_CODE |DESCRIPTION |COLOR |
SH1 |SH |Shirt |Blue |
SH2 |SH |Shirt |Red |
BT1 |BT |Belt |Black |
BT4 |BT |Belt |Brown |
WT1 |WT |Watch |Silver|
WT6 |WT |Watch |Gold |
是否可以编写 SQL 查询,将 return 一行包含每个 PROD_CODE
的所有列?如果,是什么?
希望有一个 ANSI SQL 解决方案,因为我必须同时使用 PSQL 和 TSQL。此外,即使表可能有数百万行,性能也不是一个重要的考虑因素。这是一次性执行以获得文档的示例数据。
例如,结果可能如下所示:
CAT_NO |PROD_CODE |DESCRIPTION |COLOR |
SH1 |SH |Shirt |Blue |
BT4 |BT |Belt |Brown |
WT6 |WT |Watch |Gold |
每个PROD_CODE
一行。任何行都可以接受。
select *
from
( select *
, row_number() over (partition by PROD_CODE order by CAT_NO) as rn
from table
) tt
where tt.rn = 1
如果根据 prod_code 返回的数据无关紧要,您可以使用 row_number() over (partition by prod_code order by cat_no) as row_num
并在 row_num = 1
.
上过滤结果集
像这样:
SELECT CAT_NO, PROD_CODE, DESCRIPTION, COLOR
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY PROD_CODE ORDER BY CAT_NO) AS row_num
FROM TABLE
) t
WHERE t.row_num = 1
而且,这也有效:
SELECT *
FROM TABLE T
WHERE T.CAT_NO IN (SELECT MAX(T1.CAT_NO) FROM TABLE T1 GROUP BY PROD_CODE)
我需要一个示例数据集,主要是为了减少行数,以便可以将示例加载到一个 Excel sheet 中。
我查看了分析函数和这个 Ask Tom post,但我无法获得我需要的结果,主要是因为我看不到我的需求能够利用分析分组。
这是数据的表示形式。每一行都是独一无二的。 Cat_No
是主键。
CAT_NO |PROD_CODE |DESCRIPTION |COLOR | SH1 |SH |Shirt |Blue | SH2 |SH |Shirt |Red | BT1 |BT |Belt |Black | BT4 |BT |Belt |Brown | WT1 |WT |Watch |Silver| WT6 |WT |Watch |Gold |
是否可以编写 SQL 查询,将 return 一行包含每个 PROD_CODE
的所有列?如果,是什么?
希望有一个 ANSI SQL 解决方案,因为我必须同时使用 PSQL 和 TSQL。此外,即使表可能有数百万行,性能也不是一个重要的考虑因素。这是一次性执行以获得文档的示例数据。
例如,结果可能如下所示:
CAT_NO |PROD_CODE |DESCRIPTION |COLOR | SH1 |SH |Shirt |Blue | BT4 |BT |Belt |Brown | WT6 |WT |Watch |Gold |
每个PROD_CODE
一行。任何行都可以接受。
select *
from
( select *
, row_number() over (partition by PROD_CODE order by CAT_NO) as rn
from table
) tt
where tt.rn = 1
如果根据 prod_code 返回的数据无关紧要,您可以使用 row_number() over (partition by prod_code order by cat_no) as row_num
并在 row_num = 1
.
像这样:
SELECT CAT_NO, PROD_CODE, DESCRIPTION, COLOR
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY PROD_CODE ORDER BY CAT_NO) AS row_num
FROM TABLE
) t
WHERE t.row_num = 1
而且,这也有效:
SELECT *
FROM TABLE T
WHERE T.CAT_NO IN (SELECT MAX(T1.CAT_NO) FROM TABLE T1 GROUP BY PROD_CODE)