基于条件的选择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 |
+--------+------------+------+------------+
我查询函数应该是这样的:每个Entity
和Department
对,选择具有maximum code count
的code
。
任何帮助将非常感激。谢谢。
答
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
答
这应该为你工作:
SELECT ENTITY, DEPARTMENT, CODE
FROM TABLE
WHERE CODE_COUNT IN (
SELECT MAX(CODE_COUNT) FROM TABLE GROUP BY ENTITY, DEPARTMENT)
答
使用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
你好,这可能会很好地解决这个问题...但它会是很好的,如果你可以编辑你的答案,并提供有关如何以及为什么它的工作原理:)不要忘记一点解释 - 有堆的堆栈溢出的新手,他们可以从你的专业知识中学到一两件事 - 对你来说显而易见的东西可能对他们来说不是这样。 – 2014-12-01 22:42:10
谢谢你的回答! – Sam 2014-12-02 16:06:24