首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle中group by中的RANKing

oracle中group by中的RANKing
EN

Stack Overflow用户
提问于 2015-07-23 17:02:38
回答 3查看 11.9K关注 0票数 4

我有一个问题

代码语言:javascript
复制
Select age,qualification,sum(income) as total_income  from employee
group by age,qualification;

我想要找到基于total_income的年龄和资质组的排名。

例如

代码语言:javascript
复制
19|Grad|5000|rank:1
19|Grad|4000|rank:2
19|Grad|3000|rank:3
26|Grad|6000|rank:1
26|Grad|5000|rank:2
26|PosG|8000|rank:1
26|PosG|6000|rank:2

我可以在Oracle中执行此操作吗?我试着使用partition by,但没能弄清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-23 17:23:35

SQL Fiddle

Oracle 11g R2架构设置

代码语言:javascript
复制
CREATE TABLE Employees ( Age, Qualification, Income ) AS
          SELECT 19, 'Grad', 5000 FROM DUAL
UNION ALL SELECT 19, 'Grad', 4000 FROM DUAL
UNION ALL SELECT 19, 'Grad', 3000 FROM DUAL
UNION ALL SELECT 26, 'Grad', 6000 FROM DUAL
UNION ALL SELECT 26, 'Grad', 5000 FROM DUAL
UNION ALL SELECT 26, 'PosG', 8000 FROM DUAL
UNION ALL SELECT 26, 'PosG', 6000 FROM DUAL;

查询1

代码语言:javascript
复制
SELECT Age,
       Qualification,
       Income,
       RANK() OVER ( PARTITION BY Age, Qualification ORDER BY Income DESC ) AS "Rank"
FROM   Employees

代码语言:javascript
复制
| AGE | QUALIFICATION | INCOME | Rank |
|-----|---------------|--------|------|
|  19 |          Grad |   5000 |    1 |
|  19 |          Grad |   4000 |    2 |
|  19 |          Grad |   3000 |    3 |
|  26 |          Grad |   6000 |    1 |
|  26 |          Grad |   5000 |    2 |
|  26 |          PosG |   8000 |    1 |
|  26 |          PosG |   6000 |    2 |

查询2

代码语言:javascript
复制
WITH total_incomes AS (
  SELECT Age,
         Qualification,
         SUM( Income ) AS total_income
  FROM   Employees
  GROUP BY
         Age,
         Qualification
)
SELECT Age,
       Qualification,
       total_income,
       RANK() OVER ( ORDER BY total_income DESC ) AS "Rank"
FROM   total_incomes

代码语言:javascript
复制
| AGE | QUALIFICATION | TOTAL_INCOME | Rank |
|-----|---------------|--------------|------|
|  26 |          PosG |        14000 |    1 |
|  19 |          Grad |        12000 |    2 |
|  26 |          Grad |        11000 |    3 |
票数 7
EN

Stack Overflow用户

发布于 2015-07-23 17:26:02

代码语言:javascript
复制
select  age,qualification,total_income
row_number() over (partition by age,qualification order by income desc) as rank from
(
Select age,qualification,sum(income) as total_income  from employee
group by age,qualification
) T1
票数 0
EN

Stack Overflow用户

发布于 2020-11-13 03:09:34

代码语言:javascript
复制
Select 
          Age,
          Qualification,
          sum(income) as totalIncome,
          dense_rank () over (order by 
                             sum(income) desc) as DRnk    from exam_RG 
    group by age,Qualification

Age Qualification   totalIncome DRnk
26  Grad            21000        1
19  Grad            12000        2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31582773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档