我有一个group_concat,它返回一列中的所有字符串。字符串可以是可变长度的。如何选择group_concat返回的第一个字符串(其中'first'由group_concat排序子句定义)?
这是一个简化的例子。从蔬菜表中选择每种蔬菜类型中最便宜的蔬菜。
从这张表中......
veg type price ------------------- carrot root 1.23 turnip root 0.45 sprouts bud 3.56 ...
选择此....
selectedVeg price ------------------- turnip 0.45 sprouts 3.56 ...
我的笨拙尝试......
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'将返回'萝卜,胡萝卜'。然后locate找到第一个逗号。然后substring将所有字符返回到此逗号。 所以selectedVeg等于'萝卜'。
我添加了一个'concat'以确保找到一个逗号以便找到。
这看起来效率不高,因为group_concat必须运行两次(在我的实际问题中它非常复杂)。 感谢。
答案 0 :(得分:0)
使用预查询获得每个“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 ....您的选择。