基于条件的选择SQL查询

问题描述:

例如我有一个表“信息”如下。基于条件的选择SQL查询

+--------+------------+------+------------+ 
| Entity | Department | Code | Code_count | 
+--------+------------+------+------------+ 
| E1  | D1   | 123 |   5 | 
| E1  | D1   | 234 |   10 | 
| E1  | D1   | 345 |   20 | 
| E1  | D2   | 456 |   2 | 
| E1  | D2   | 567 |   5 | 
| E1  | D2   | 678 |   10 | 
+--------+------------+------+------------+ 

我查询函数应该是这样的:每个EntityDepartment对,选择具有maximum code countcode

任何帮助将非常感激。谢谢。

select t1.* 
from your_table t1 
join 
(
    select entity, department, max(Code_count) as Code_count 
    from your_table 
    group by entity, department 
) t2 on t1.entity = t2.entity 
    and t1.department = t2.department 
    and t1.Code_count = t2.Code_count 
+2

你好,这可能会很好地解决这个问题...但它会是很好的,如果你可以编辑你的答案,并提供有关如何以及为什么它的工作原理:)不要忘记一点解释 - 有堆的堆栈溢出的新手,他们可以从你的专业知识中学到一两件事 - 对你来说显而易见的东西可能对他们来说不是这样。 – 2014-12-01 22:42:10

+0

谢谢你的回答! – Sam 2014-12-02 16:06:24

这应该为你工作:

SELECT ENTITY, DEPARTMENT, CODE 
FROM TABLE 
WHERE CODE_COUNT IN (
    SELECT MAX(CODE_COUNT) FROM TABLE GROUP BY ENTITY, DEPARTMENT) 

SQL小提琴:http://sqlfiddle.com/#!2/482397/12

使用Window Function得到的结果。

SELECT Row_number()OVER(
         partition BY Entity, Department 
         ORDER BY Code_count DESC) RN, 
        * 
      FROM table_name 

partition BY将查询结果集划分为多个分区。窗口函数分别应用于每个分区,并为每个分区重新启动计算。

SELECT Entity, 
     Department, 
     Code, 
     Code_count 
FROM (SELECT Row_number()OVER(
        partition BY Entity, Department 
        ORDER BY Code_count DESC) RN, 
       * 
     FROM table_name) A 
WHERE rn = 1