SQL 根据两列过滤
SQL filter according to two column
输入
这是我的 table 名字 'MYTABLE'
P3 的值是恒定的。但是P1和P2的值可以是任意整数!!!
AIM
我的目标是按 CITY AND PROD 对每个 city-prod 组合进行分组,然后(对于每个 city-prod)取 P3 的最小值。 但我想在结果中保留 P1 和 P2 的值。
查询
到目前为止,我已经尝试了以下查询,但没有提供我要查找的输出。
SELECT CITY, PROD, MIN(P3)
FROM MYTABLE
GROUP BY CITY, PROD
结果显示 2 行。 2 行是正确的,但我松开了 P1 和 P2 列。
预期输出
所以我的问题是如何编写查询来保留P1 和P2 的值。 (见下图)
PS:我并不是绝对希望在我的查询中使用 'GROUP BY'。如果有另一种方法可以解决这个问题,那也很好。不知何故,我发现目标并不太复杂,但出于某种原因,我无法弄清楚(即使在互联网上看过之后)如何解决这个问题。
我会使用 row_num
window 函数根据行的 p3
值对行进行排序并取第一个:
SELECT city, prod, p1, p2, p3
FROM (SELECT city, prod, p1, p2, p3,
ROW_NUM() OVER (PARTITION BY city, prod ORDER BY p3 DESC) AS rn
FROM mytable) t
WHERE rn = 1
您想根据 p3
的值对 select 每组 city
和 prod
的正确行使用分区:
with cte as (select *, row_number() over(partition by city, prod order by p3) as rn
from table1)
select city, prod, p1, p2, p3
from cte
where rn = 1
您可以看到它的实际效果 here。
输入
这是我的 table 名字 'MYTABLE' P3 的值是恒定的。但是P1和P2的值可以是任意整数!!!
AIM
我的目标是按 CITY AND PROD 对每个 city-prod 组合进行分组,然后(对于每个 city-prod)取 P3 的最小值。 但我想在结果中保留 P1 和 P2 的值。
查询
到目前为止,我已经尝试了以下查询,但没有提供我要查找的输出。
SELECT CITY, PROD, MIN(P3)
FROM MYTABLE
GROUP BY CITY, PROD
结果显示 2 行。 2 行是正确的,但我松开了 P1 和 P2 列。
预期输出
所以我的问题是如何编写查询来保留P1 和P2 的值。 (见下图)
PS:我并不是绝对希望在我的查询中使用 'GROUP BY'。如果有另一种方法可以解决这个问题,那也很好。不知何故,我发现目标并不太复杂,但出于某种原因,我无法弄清楚(即使在互联网上看过之后)如何解决这个问题。
我会使用 row_num
window 函数根据行的 p3
值对行进行排序并取第一个:
SELECT city, prod, p1, p2, p3
FROM (SELECT city, prod, p1, p2, p3,
ROW_NUM() OVER (PARTITION BY city, prod ORDER BY p3 DESC) AS rn
FROM mytable) t
WHERE rn = 1
您想根据 p3
的值对 select 每组 city
和 prod
的正确行使用分区:
with cte as (select *, row_number() over(partition by city, prod order by p3) as rn
from table1)
select city, prod, p1, p2, p3
from cte
where rn = 1
您可以看到它的实际效果 here。