gpt4 book ai didi

mysql - 根据结果​​数量截断和连接 mysql 结果

转载 作者:行者123 更新时间:2023-11-29 05:49:55 25 4
gpt4 key购买 nike

我想连接一个订单的所有商品名称;但是,如果唯一项目名称的总数超过一定数量,那么我想在连接名称之前截断每个名称。以下是条件:

如果订单中唯一项名称的总数少于 5,则使用全长项名称并连接名称;否则,如果唯一项目名称的总数大于 5,则将每个项目名称截断为 20 个字符并连接截断的名称。例如,下面是我的表格:

order_id | item_name                           | item_name_len
---------|-------------------------------------|--------------
1 | "pampers diapers ultra sensitive" | 31
1 | "cabbage salad pure organic greens" | 33
1 | "milky way" | 9
1 | "sea salt" | 8
1 | "cool waters fruit juice" | 23
| |
2 | "pure clear glass crystals" | 25
2 | "simple sugar edible paper" | 25

我想要以下结果:

order_id | all_item_names                           
---------|-----------------------------------------------------------
1 | "pampers diapers ultr ; cabbage salad pure o ; milky way ;
| sea salt ; cool waters fruit ju"
|
2 | "pure clear glass crystals ; simple sugar edible paper"

对于订单 #1,由于订单中有 5 个唯一的商品名称,我们将每个商品名称截断为 20 个字符并将截断后的名称连接起来。对于订单 #2,由于订单中只有 2 个唯一的项目名称,我们采用名称的全长并将它们连接起来。 (为了便于说明,我在上表中包含了项目名称 strlen。)

我正在尝试使用三元条件,但它不起作用。
IF( COUNT(DISTINCT item_name) < 5, item_name, SUBSTRING(item_name, 1, 20) )

请参阅下面的查询。我得到 Error code: 1111. Invalid use of group function

SELECT
w.order_id,
(SELECT GROUP_CONCAT( IF ( COUNT(DISTINCT o.item_name) < 5 ,
o.item_name, SUBSTRING(o.item_name, 1, 20) ) ) separator ' ; ' )
FROM order_items o WHERE o.order_id = w.order_id)AS all_item_names

FROM order_items w
GROUP BY order_id

最佳答案

您可以通过一次聚合来完成此操作,而无需 join:

select oi.order_id,
(case when count(*) < 5
then group_concat(oi.item_name separator '; ')
else group_concat(left(oi.item_name, 20) separator ';')
end) as all_item_names
from order_items oi
group by oi.order_id

关于mysql - 根据结果​​数量截断和连接 mysql 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55398903/

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