sql - SQL Partition by with 条件
问题描述
我想根据两列 Type 和 Env 对数据进行分区,并按 count desc 获取每个分区顺序的前 5 条记录。我面临的问题是我需要根据 LIKE 条件对 Env 进行分区。数据 -
类型 | 环境 | 数数 |
---|---|---|
T1 | E1 | 1 |
T1 | M1 | 2 |
T1 | AB1 | 3 |
T2 | E1 | 1 |
T2 | M1 | 2 |
T2 | CB1 | 3 |
T2 | M1 | 5 |
我想要的结果 - 假设我现在正在获取前 (1) 条记录
类型 | 环境 | 数数 |
---|---|---|
T1 | M1 | 2 |
T1 | AB1 | 3 |
T2 | CB1 | 3 |
T2 | M1 | 5 |
在这里,我将环境划分为条件(env LIKE "%M%" 和 env NOT LIKE "%M")
我能想到的一种方法是使用分区和联合,但这是一个非常昂贵的调用,因为我要从中过滤大量数据。有没有更好的方法来实现这一目标?
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Count DESC) AS maxCount
FROM
table
WHERE
Env LIKE '%M%'
) AS t1
WHERE
t1.maxCount <= 5
UNION
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Count DESC) AS maxCount
FROM
table
WHERE
Env NOT LIKE '%M%'
) AS t1
WHERE
t1.maxCount <= 5
解决方案
您似乎希望partition by
在您的row_number()
:
select t.*
from (select t.*,
row_number() over (partition by type, case when environment like '%M%' then 1 else 2 end)
order by count desc
) as seqnum
from t
) t
where seqnum <= 5;
推荐阅读
- javascript - ReactJS 中 Material ui 的自动完成问题
- javascript - 根据多个属性过滤项目
- windows - 无法为 win 安装 automake
- ios - 将应用程序上传到 App Store Connect 时出错
- python-3.x - 以python方式将多个裁剪的PDF图像添加到同一个PDF页面中
- python - 使用条形图在 Matplotlib 中的 x 轴上显示刻度
- visual-studio - 在 Visual Studio 中构建时如何使用所有内核?
- javascript - 显示来自 .Js 文件中指定的路径并链接到 React Native 中的 .JSON 文件的图像
- node.js - 从 REST API 获取在 Azure VM 中不起作用
- generics - 如何在 Haxe 泛型类的类型之间使用运算符?