-1
我有一个表看起来像的Oracle SQL如何通过第一组,然后比较频率
table operation employee
'<' id1
'<' id1
'<' id2
'*' id3
'/' id1
对于每个操作,我想知道哪个员工做的是什么?第二名雇员是谁?
我有一个表看起来像的Oracle SQL如何通过第一组,然后比较频率
table operation employee
'<' id1
'<' id1
'<' id2
'*' id3
'/' id1
对于每个操作,我想知道哪个员工做的是什么?第二名雇员是谁?
试试这个:
SELECT operations.operation, employees.employee, employees.rank
FROM (
SELECT t1.operation
FROM table t1
GROUP BY t1.operation
) operations INNER JOIN (
SELECT t2.employee, t2.operation, COUNT(1) rank
FROM table t2
GROUP BY t2.employee
) employees ON operations.operation = employees.operation
ORDER BY operations.operation, employees.rank DESC
对于每一个操作,我们得到每个对应员工的数量。这些操作因子查询中的GROUP BY
而不同,并且由于其他子查询中的GROUP BY
而导致员工不同。我们在操作中加入两个子查询,然后按每个员工与操作关联的次数进行排序。
Oracle有一个[RANK函数](http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm) – 2013-04-06 04:30:57
*我想知道哪位员工的工作最多?*最重要的是什么? – 2013-04-06 04:27:35
对不起。我的意思是一个特定的操作,哪个员工最有效。例如,对于操作'<',员工id1做了5次,id2做了3次,id3只做了1次。所以我们需要弄清楚id1是第一位,id2位居第二位,id3位居第三位。 – new2cpp 2013-04-06 07:41:38