下面是我的postgres表:
表格:
+------+-----------------+---------+
| sku | properties | value |
|------+-----------------+---------|
| 1 | Family_ID | 21 |
| 1 | Class_ID | 21 |
| 2 | Family_ID | 20 |
| 2 | Class_ID | 21 |
| 3 | Family_ID | 21 |
| 3 | Class_ID | 21 |
+------+-----------------+---------+
如何查询是否要从 Family_ID
以及 Class_ID
是 21
.
预期返回值:
+------+-----------------+---------+
| sku | properties | value |
|------+-----------------+---------|
| 1 | Family_ID | 21 |
| 1 | Class_ID | 21 |
| 3 | Family_ID | 21 |
| 3 | Class_ID | 21 |
+------+-----------------+---------+
如何查询是否要从 Family_ID
是 20
以及 Class_ID
是 21
.
预期返回值:
+------+-----------------+---------+
| sku | properties | value |
|------+-----------------+---------|
| 2 | Family_ID | 20 |
| 2 | Class_ID | 21 |
+------+-----------------+---------+
3条答案
按热度按时间mefy6pfw1#
此查询:
返回所有
sku
满足你的条件的,你可以和操作符一起使用IN
这样地:也可以使用max()窗口函数:
请看演示。
结果:
r55awzrz2#
要跨行操作,您需要分组,但这里最简单的事情(考虑到您似乎希望此主题有更多的变体)可能是数据透视:
现在可以使用where子句,如normal:
如果需要以列格式返回数据,可以再次取消打印:
但只处理数据透视形式的数据可能更容易。
我自己不一定要这么做,但是如果您习惯于常规的连接、联合和其他类似的“典型”数据库操作,那么理解这种形式的数据透视就容易多了,所以我推荐您使用它,因为您可能会发现它更易于维护和扩展。执行透视的条件聚合可能更有效,但维护起来更复杂:
案件蔓延时
value
根据properties
价值观。groupby/max然后折叠行,删除空值,留下唯一的sku和指定列中的值(根据它们是哪种值)vql8enpb3#