SQL过滤器根据两列

时间:2018-05-25 19:20:38

标签: sql group-by selection aggregation

INPUT

这是我的名为'MYTABLE'的表 P3的值是不变的。但是P1和P2的值可以是任何整数!!!

enter image description here

AIM

我的目标是按城市和PROD分组,对于每个城市 - 产品组合,然后(对于每个城市产品)取最小值P3。 但我想在结果中保留P1和P2的值。

QUERY

到目前为止,我尝试了以下不提供我要查找的输出的查询。

SELECT CITY, PROD, MIN(P3)
FROM MYTABLE
GROUP BY CITY, PROD

结果显示2行。 2行是正确的但我松散了P1和P2列。

enter image description here

预期输出

所以我的问题是如何编写查询以保持P1和P2的值。 (见下图)

enter image description here

PS:我并不是绝对想在我的查询中使用'GROUP BY'。如果有另一种方法可以解决这个问题,那也会很棒。不知何故,我发现目标不是太复杂,但由于某种原因,我无法弄清楚(即使在看过互联网之后)如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

您希望根据city的值,使用分区为每组prodp3选择正确的行:

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中看到它。

答案 1 :(得分:0)

我使用function ShowProduct() { $data = "Welcome to wordpress shortcode."; return $data; } add_shortcode('products', 'ShowProduct'); 窗口函数根据row_num值对行进行排序,然后选择第一行:

p3