【问题标题】:How to partition based on two columns in Oracle/sqlOracle/sql中如何根据两列进行分区
【发布时间】:2015-12-14 16:50:07
【问题描述】:

请帮我解决以下问题

问题:

+--------+----------+ |姓名 |子名 | +--------+----------+ |一个 | x | |一个 | x | |乙| x | |一个 |是 | |乙|是 | +--------+----------+

期望的结果:

+--------+----------+------+ |姓名 |子名 |计数 | +--------+----------+------+ |一个 | x | 2 | |一个 | x | 2 | |乙| x | 1 | |一个 |是 | 1 | |乙|是 | 1 | +--------+----------+------+

三列名称、子名称、计数

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

【问题讨论】:

  • 请阅读How to Ask。你试过什么?
  • 如果我问的问题不正确,我很抱歉。我试过 count(Name) OVER (PARTITION BY Sub-NAME) AS Count
  • 好的,那不正确的输出是什么? (仅供参考,这是您应该在问题中提出的问题 - 这里的人会帮助您调试您已经编写的代码,但他们不太可能只为您编写代码。)
  • 不完全确定您在追求什么,但听起来您想查看汇总或多维数据集。
  • 看起来你在 count() over () 的正确轨道上,但分区规范看起来有点不对。

标签: sql oracle window-functions


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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 |
    

    【讨论】:

      【解决方案3】:

      试试这个:

      select name, sub_name, count(name) over (partition by name, sub_name) as count from table

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 2021-10-14
        • 1970-01-01
        相关资源
        最近更新 更多