gpt4 book ai didi

sql - GROUP BY并取给定值(如果它不为空)

转载 作者:行者123 更新时间:2023-12-03 16:09:51 26 4
gpt4 key购买 nike

我有 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的位置。如果 NAMENY为空,则取另一个。如果 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com