MySQL:选择GROUP_CONCAT函数返回的第一项
我有一个MySQL:选择GROUP_CONCAT函数返回的第一项,mysql,group-by,group-concat,Mysql,Group By,Group Concat,我有一个组\u concat,它返回一列中的所有字符串。字符串可以是可变长度的。如何选择group\u concat返回的第一个字符串(其中“first”由group\u concat排序子句定义) 这里是一个简化的例子。从蔬菜表中,从每种蔬菜中选择最便宜的蔬菜 从该表中: veg type price ---------------------- carrot root 1.23 turnip root 0.45 sprouts bud 3.56 ...
组\u concat
,它返回一列中的所有字符串。字符串可以是可变长度的。如何选择group\u concat
返回的第一个字符串(其中“first”由group\u concat
排序子句定义)
这里是一个简化的例子。从蔬菜表中,从每种蔬菜中选择最便宜的蔬菜 从该表中: veg type price ---------------------- carrot root 1.23 turnip root 0.45 sprouts bud 3.56 ... 因此,对于根类蔬菜,“CONCAT组”将返回“萝卜,胡萝卜”。然后定位程序找到第一个逗号。然后子字符串返回所有字符,直到这个逗号。所以“精选蔬菜”等于“萝卜” 我添加了一个
CONCAT
,以确保LOCATE
始终有一个逗号可供查找
这似乎不是很有效,因为组\u CONCAT
必须运行两次(在我的实际问题中这相当复杂)
谢谢。使用预查询获得每种“类型”的最低价格,然后加入该
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使用组_CONCAT(v2.Veg…)作为所选Veg
并添加一个GROUPBY v2。在查询末尾键入。。。。您的选择。使用预查询获得每种“类型”的最低价格,然后加入该
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使用组_CONCAT(v2.Veg…)作为所选Veg
并添加一个GROUPBY v2。在查询末尾键入。。。。您的选择。如果您只退回“类型”蔬菜中的一种,您是否会对“康卡特”组感到烦恼?我想你不是,这要简单得多,但如果你使用group_concat,仍然可以做到,只是不想混淆最终答案。。。另外,如果两个或更多的蔬菜有相同的“最低”价格…谢谢@DRapp,如果我可以不使用集体餐,那就太好了。我该怎么做?As“组”将自行返回一个随机蔬菜。如果两种蔬菜的价格相同,那么退哪一种并不重要。如果你只退一种“类型”的蔬菜,有没有理由你还要为团体康卡特而烦恼?我想你不是,这要简单得多,但如果你使用group_concat,仍然可以做到,只是不想混淆最终答案。。。另外,如果两个或更多的蔬菜有相同的“最低”价格…谢谢@DRapp,如果我可以不使用集体餐,那就太好了。我该怎么做?As“组”将自行返回一个随机蔬菜。如果两种蔬菜的价格相同,那么退哪一种并不重要。