我有下面的例子:GROUP BY功能问题
SELECT name, age, location, SUM(pay)
FROM employee
GROUP BY location
这种预期会给我一个错误:
ORA-00979: not a GROUP BY expression
我怎样才能解决这个得到什么?我需要组成一个或许两列,但需要返回所有列,即使它们不在GROUP BY子句中使用,我已经查看了子查询以避开它,但目前为止没有运气。
我有下面的例子:GROUP BY功能问题
SELECT name, age, location, SUM(pay)
FROM employee
GROUP BY location
这种预期会给我一个错误:
ORA-00979: not a GROUP BY expression
我怎样才能解决这个得到什么?我需要组成一个或许两列,但需要返回所有列,即使它们不在GROUP BY子句中使用,我已经查看了子查询以避开它,但目前为止没有运气。
因此,您想了解按地点划分的总工资情况,并且您想知道每个地点的员工姓名和年龄?如何:
SELECT e.NAME,
e.AGE,
e.LOCATION,
t.TOTAL_LOCATION_PAY
FROM EMPLOYEE e
INNER JOIN (SELECT LOCATION,
SUM(PAY) AS TOTAL_LOCATION_PAY
FROM EMPLOYEE
GROUP BY LOCATION) t
ON (t.LOCATION = e.LOCATION)
分享和享受。
你好,请阅读我的答案。 – Roger 2013-03-22 12:35:58
您可以使用分析功能:
SELECT name
, age
, location
, pay
, SUM(pay) over (partition by location order by location) total
FROM employee
所以,你可以返回,即使他们没有在分组中使用的所有行。
+1。 。 。这是更好的方法。 – 2013-03-22 14:27:07
(Group b [http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj32654.html]每个不在group by子句中的列中必须有一个聚合函数。分组意味着你想每组有一行,子句中列的不同值出现在最终结果集中
这是因为oracle无法知道列中哪些值没有有组通过检索在考虑这个:?
A X
B X
Select col1, col2 from myTable group by col2; -- incorrect
Select min(col1), col2 from myTable group by col2; -- correct
为什么第一不正确的,因为Oracle不知道是否检索A或B的X值,你必须SPECI fy it。即MIN,MAX等。
这个命名的分析函数有一个替代方案,它允许你在结果集的窗口下工作。
现在,如果您希望员工按地点支付总工资,并且每个员工都可能需要这样。
SELECT name, age, location, SUM(pay) OVER(PARTITION BY location)
FROM employee
我相信这比@Bob Jarvis查询更好,因为您只查询表格一次。如果我错了,请纠正我。他还有员工和员工。错字?
错字。纠正。谢谢。 – 2013-03-22 13:11:10
你在这里使用GROUP BY是什么? – 2013-03-22 11:12:18
请提及输入和所需的输出。 – 2013-03-22 11:14:05
对于每个分组的“位置”,您希望从其他列'name,age,pay'返回哪些值?请张贴一些示例数据和期望的输出? – 2013-03-22 11:14:12