Row_number() 和 group by 一起不起作用
Posted
技术标签:
【中文标题】Row_number() 和 group by 一起不起作用【英文标题】:Row_number() and group by together not working 【发布时间】:2018-08-10 11:14:44 【问题描述】:我写了下面的查询,我需要知道我做错了什么。添加row_number()
后,输出一直是这个错误:
ORA-00979:不是 GROUP BY 表达式 00979. 00000 - “不是 GROUP BY 表达式” *原因: *行动: 行错误:22 列:32
SQL Developer 工具提示建议将row_number()
与Is_Data_Picked
一起添加到group by 中。但据我所知row_number()
是一个计算每一行的分析函数,它不能在GROUP BY
子句中使用
当我在GROUP BY
中使用row_number()
时,会显示以下错误
ORA-30484:缺少此函数的窗口规范 30484. 00000 - “此函数缺少窗口规范” *原因:所有的窗口函数都应该跟窗口规范,比如() OVER() *行动: 行错误:26 列:26
我想在查询中同时使用“GROUP BY”和“ROW_NUMBER()”。
请帮助我纠正此问题并建议我解决方案。
查询:
SELECT *
FROM
(SELECT
COUNT(DISTINCT Emp_Code) totalEmployees,
SUM(CASE WHEN pay_code = 999 THEN AMOUNT ELSE '0' END) net_salary,
SUM(CASE WHEN pay_code = 997 THEN AMOUNT ELSE '0' END) gross_earning,
SUM(CASE WHEN pay_code = 998 THEN AMOUNT ELSE '0' END) gross_deduction,
Is_Data_Picked,
ROW_NUMBER() OVER (ORDER BY (Emp_Code)) AS ROW_NUM
FROM
Xxmpcd_Salary_Detail_Table
WHERE
Prayas_Erp_Org_Id LIKE '302-%'
AND Yyyymm = '201805'
GROUP BY
Is_Data_Picked, ROW_NUMBER()) mytbl
WHERE
ROW_NUM < 600 AND ROW_NUM > 0
【问题讨论】:
【参考方案1】:这是您的子查询的相关部分:
SELECT . . .
ROW_NUMBER() OVER (ORDER BY (Emp_Code)) AS ROW_NUM
FROM Xxmpcd_Salary_Detail_Table
WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
GROUP BY Is_Data_Picked, ROW_NUMBER()
您在第一个ROW_NUMBER()
中有错误,因为Emp_Code
不在GROUP BY
中。第二个有错误,因为ROW_NUMBER()
不是函数。
我可以推测你的意图:
SELECT . . .
ROW_NUMBER() OVER (ORDER BY Emp_Code) AS ROW_NUM
FROM Xxmpcd_Salary_Detail_Table
WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
GROUP BY Is_Data_Picked, Emp_Code
如果您不想按Emp_Code
聚合,那么您可能打算:
SELECT . . .
ROW_NUMBER() OVER (ORDER BY MIN(Emp_Code)) AS ROW_NUM
FROM Xxmpcd_Salary_Detail_Table
WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
GROUP BY Is_Data_Picked
【讨论】:
天哪,我需要将 Emp_code 也包含在 group by 子句中,非常感谢,我现在会处理这个以上是关于Row_number() 和 group by 一起不起作用的主要内容,如果未能解决你的问题,请参考以下文章
row_number() over (partition by order by)的用法
oracle的row_number() OVER (ORDER BY COL2 asc)和row_number() OVER (PARTITION BY COL1 ORDER BY COL2)的用法