【问题标题】:select top record and count from each group oracle? [duplicate]从每组预言中选择最高记录和计数? [复制]
【发布时间】:2020-01-06 04:30:43
【问题描述】:

获得最高记录并计数?

PKid    |    QId    |    QNumber    |    EmailId    |    FirstName    |    LastName    |
1    |    102    |    A1022    |    jsmith@test.com    |    John    |    Smith    |
2    |    103    |    A1021    |    jsmith@test.com    |    John    |    smith    |
3    |    104    |    A1031    |    jblack@test.com    |    Jack    |    Black    |
4    |    105    |    A1032    |    jblack@test.com    |    Jack    |    black    |
5    |    106    |    A1023    |    jsmith@test.com    |    John    |

我想按名称和按职业 desc 和计数的顺序获取记录组。像这样-

  S.no    |    QId    |    QNumber    |    EmailId    |    FirstName    |    LastName    |    Count
1    |    106    |    A1023    |    jsmith@test.com    |    John    |    |    3 
2    |    105    |    A1032    |    jblack@test.com    |    Jack    |    black    |    2

我尝试了类似的方法,但没有运气---

    SELECT
    ROW_NUMBER() OVER(
        ORDER BY
            COUNT(1) DESC
    ) AS S_NO,QId,
    MAX(QNUMBER) AS QNUMBER,
    EmailId,FirstName,LastName
    COUNT(1)
FROM
    TblEmp   
GROUP BY
    EmailId; 

【问题讨论】:

    标签: sql oracle oracle11g greatest-n-per-group


    【解决方案1】:

    我会做的

    ROW_NUMBER() OVER(PARTITION BY EmailId ORDER BY qnumber DESC) AS rown
    

    然后将其全部包装在具有WHERE rown = 1 的外部查询中。外部查询也会计算 S_NO,而不是内部查询

    类似这样的:

    SELECT 
      ROW_NUMBER() OVER(ORDER BY qnumber) AS S_NO,
      ee.*
    FROM
    (
        SELECT
          ROW_NUMBER() OVER(PARTITION BY EmailId ORDER BY qnumber DESC) AS rown,
          COUNT(*) OVER(PARTITION BY EmailId) AS count,
          e.*
        FROM
            TblEmp e   
    
    ) ee
    WHERE ee.rown = 1
    

    但我不太确定您的“按计数排序”在哪里;对我来说,看起来你正在获取最新的(根据 qnumber)记录,计算其他记录,并将一些任意递增的数字重新分配为 s_no

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多