2014-12-01 2 views
-3

Например, у меня есть таблица «Информация», как показано ниже.условие на основе select 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 | 
+--------+------------+------+------------+ 

Мой запрос должен функционировать следующим образом: для каждого Entity и Department пары, выберите code который имеет maximum code count.

Любая помощь будет очень оценена. Благодарю.

ответ

0
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

Hiya, это вполне может решить проблему ... но было бы хорошо, если бы вы могли отредактировать свой ответ и дать небольшое объяснение о том, как и почему оно работает :) Не забудьте - есть кучи новичков в переполнении стека, и они могли бы узнать кое-что из вашего опыта - что очевидно для вас, возможно, не так для них. –

+0

Спасибо за ответ! – Sam

0

Это должно работать для вас:

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

0

использовать 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