我有 table
+-----+-----------+-----+
| ID | NAME | LOC |
+-----+-----------+-----+
| 101 | Stainless | NY |
| 101 | Brass | MUM |
| 102 | | NY |
| 102 | Gold | JP |
| 103 | Silver | CN |
| 103 | Aluminium | US |
| 104 | Platinum | NY |
| 104 | Diamond | UK |
| 105 | | NY |
+-----+-----------+-----+
我想group by
并把NAME
对应到NY
的位置。如果NAME
的NY
为空,则取另一个。如果NY
对任何ID
不可用,则从其他位置获取任何NAME
。而且,如果某个ID仅使用空NAME
出现一次,那么我们可以采用相同的值。预期产量
+-----+-----------+
| ID | NAME |
+-----+-----------+
| 101 | Stainless |
| 102 | Gold |
| 103 | Silver |
| 104 | Platinum |
| 105 | |
+-----+-----------+
我已经尝试了以下查询。但这没有给出我的预期输出。我想念什么?SELECT ID, MAX(CASE WHEN LOC='NY' AND NAME!='' THEN NAME END) NAME
FROM MYTABLE
GROUP BY ID
最佳答案
您可以像这样使用聚合:
select id,
coalesce( max(case when location = 'NY' then name end),
max(name)
) as desired_name
from t
group by id;
注意:这假定空白名称实际上是NULL
。如果不是,则调整逻辑:select id,
coalesce( max(case when location = 'NY' and name <> '' then name end),
max(name)
) as desired_name
from t
group by id;
关于sql - GROUP BY并取给定值(如果它不为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64999662/