2013-04-06 24 views
-1

我有一个表看起来像的Oracle SQL如何通过第一组,然后比较频率

table operation  employee 
      '<'    id1 
      '<'    id1 
      '<'    id2 
      '*'    id3 
      '/'    id1 

对于每个操作,我想知道哪个员工做的是什么?第二名雇员是谁?

+0

*我想知道哪位员工的工作最多?*最重要的是什么? – 2013-04-06 04:27:35

+0

对不起。我的意思是一个特定的操作,哪个员工最有效。例如,对于操作'<',员工id1做了5次,id2做了3次,id3只做了1次。所以我们需要弄清楚id1是第一位,id2位居第二位,id3位居第三位。 – new2cpp 2013-04-06 07:41:38

回答

0

试试这个:

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而导致员工不同。我们在操作中加入两个子查询,然后按每个员工与操作关联的次数进行排序。

+0

Oracle有一个[RANK函数](http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm) – 2013-04-06 04:30:57