如何基于Oracle / sql中的两列进行分区

时间:2015-09-17 17:46:13

标签: sql oracle window-functions

请帮我解决以下问题

问题:

+------+----------+
| Name | Sub-name |
+------+----------+
| A    | x        |
| A    | x        |
| B    | x        |
| A    | y        |
| B    | y        |
+------+----------+

期望的结果:

+------+----------+-------+
| Name | Sub-name | Count |
+------+----------+-------+
| A    | x        |     2 |
| A    | x        |     2 |
| B    | x        |     1 |
| A    | y        |     1 |
| B    | y        |     1 |
+------+----------+-------+

三列名称,子名称,计数

我想根据名称和子名称进行分区。

3 个答案:

答案 0 :(得分:5)

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE test ( Name, "Sub-name" ) AS
          SELECT 'A', 'x' FROM DUAL
UNION ALL SELECT 'A', 'x' FROM DUAL
UNION ALL SELECT 'B', 'x' FROM DUAL
UNION ALL SELECT 'A', 'y' FROM DUAL
UNION ALL SELECT 'B', 'y' FROM DUAL;

查询1

SELECT Name,
       "Sub-name",
       COUNT( 1 ) OVER ( PARTITION BY "Sub-name", Name ) AS "Count"
FROM   test

<强> Results

| NAME | Sub-name | Count |
|------|----------|-------|
|    A |        x |     2 |
|    A |        x |     2 |
|    B |        x |     1 |
|    A |        y |     1 |
|    B |        y |     1 |

答案 1 :(得分:1)

试试这个:

选择name,sub_name,count(name)over(partition by name,sub_name)作为表中的计数

答案 2 :(得分:0)

从表ra中选择ra.Name,ra.sub-name,ta.count 内部联接 (从表中选择名称,子名称,计数(*) 按名称分组,子名称ta 在ra.Name = ta.Name上 在ra.sub-name = ta.sub-name上 按子名desc排序

真的我不明白为什么我们需要为这个解决方案使用分区。即使上面的连接查询工作正常......希望它应该....