【发布时间】:2014-02-05 05:48:52
【问题描述】:
我的表格包含如下内容,
CUSTOMER_ID ATTR1 ATTR2
1 V1_0001 V2_0001 2 V1_0001 V2_0001 3 V1_0001 V2_0001 4 V1_0001 V2_0002 5 V1_0001 V2_0003 6 V1_0002 V2_0004 7 V1_0003 V2_0005 8 V1_0004 V2_0005 9 V1_0004 V2_0005 10 V1_0005 V2_0006 .. ....... ....... 100000 V1_0120 V2_0268
已选择 100000 行。
有什么方法可以在一个查询中选择每列的不同值(不使用按列出的列分组) - 也不使用 UNION? Customer_Id 不是必需的。
复杂性在于我需要将两列的不同值计数限制为每列的(第一)100 条记录。
换句话说,我的结果应该是这样的,
ATTR1 ATTR2
-------- --------
V1_0001 V2_0001
V1_0002 V2_0002
V1_0003 V2_0003
....... .......
V1_0100 V2_0100
如果该列的不同值小于 100,则为任一列返回 null(或无值)都可以。
这只是我最初查询的一小部分,其余的我可以处理。 请帮忙。
【问题讨论】:
-
不使用 GROUP BY 或者是某种测试?
-
GROUP BY attr1, attr2 给了我一个组合分组结果,其中我需要单独的 DISTINCT attr1、DISTINCT attr2 并选择 attr1 的前 100 个或更少,并选择 attr2 的前 100 个或更少。有时 attr1 可能只有 50 个值,但需要决定使用 rownum 或 rank。