gpt4 book ai didi

MySQL:选择 GROUP_CONCAT 函数返回的第一项

转载 作者:行者123 更新时间:2023-11-30 23:37:48 26 4
gpt4 key购买 nike

我有一个 group_concat,它返回一列中的所有字符串。字符串可以是可变长度的。如何选择 group_concat 返回的第一个字符串(其中“first”由 group_concat ordering 子句定义)?


这是一个简化的例子。从蔬菜表中选择每种蔬菜中最便宜的蔬菜。

来自这张表:

veg      type   price----------------------carrot   root   1.23turnip   root   0.45sprouts  bud    3.56...

Select this:

selectedVeg   price-------------------turnip        0.45sprouts       3.56...

My clumsy attempt:

SELECT
SUBSTRING(
GROUP_CONCAT(veg ORDER BY price),
1,
LOCATE(
',',
CONCAT(GROUP_CONCAT(veg order by price), ',')
) - 1
) AS selectedVeg
FROM vegTable
GROUP BY type

因此对于根菜类,'GROUP_CONCAT' 将返回 'turnip, carrot'。然后 locate 找到第一个逗号。然后 substring 返回该逗号之前的所有字符。所以“selectedVeg”等于“turnip”。

我添加了一个 CONCAT 以确保始终有一个 逗号LOCATE 查找。

这似乎不是很有效,因为 GROUP_CONCAT 必须运行两次(而且在我的实际问题中它相当复杂)。

谢谢。

最佳答案

使用预查询获取每个“TYPE”的最小价格,然后加入 THAT...

select
v2.veg,
v2.Price
from
( select v1.type, min( v1.price ) as MinimumPrice
from Veggies v1
group by v1.type ) PreQuery
join Veggies v2
on PreQuery.Type = v2.type
and PreQuery.MinimumPrice = v2.price

此查询将以给定类型的最低价格返回所有蔬菜。如果你想要单行,你可以改变

v2.Veg 使用 GROUP_CONCAT( v2.Veg... ) 作为 SelectedVeg

并将 GROUP BY v2.Type 添加到查询的末尾......您的选择。

关于MySQL:选择 GROUP_CONCAT 函数返回的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072614/

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