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“组”将自行返回一个随机蔬菜。如果两种蔬菜的价格相同,那么退哪一种并不重要。