2014-12-01 143 views
-3

例如我有一個表「信息」如下。基於條件的選擇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

任何幫助將非常感激。謝謝。

回答

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

你好,這可能會很好地解決這個問題...但它會是很好的,如果你可以編輯你的答案,並提供有關如何以及爲什麼它的工作原理:)不要忘記一點解釋 - 有堆的堆棧溢出的新手,他們可以從你的專業知識中學到一兩件事 - 對你來說顯而易見的東西可能對他們來說不是這樣。 – 2014-12-01 22:42:10

+0

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

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