我有一个group_concat,它返回一列中的所有字符串。字符串可以是可变长度的。如何选择由group_concat返回的第一个字符串(其中“第一个”由group_concat排序子句定义)?mysql - 选择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'将返回'萝卜,胡萝卜'。然后,找到第一个逗号。然后子字符串返回所有字符到这个逗号。 所以selectedVeg等于'萝卜'。
我已经添加了一个'concat'来确保总是有一个逗号来查找。
这看起来似乎非常有效,因为group_concat必须运行两次(在我的实际问题中它非常复杂)。 谢谢。
如果你只是从蔬菜的“类型”中返回一个SINGLE项目,那么你是否还有一个原因,你甚至会对群组concat产生困扰?我不是,它更简单,但如果你使用的是group_concat,只要不想混淆最终答案,那么仍然可以完成。另外,如果两个或更多的蔬菜具有相同的“最低”价格,那该怎么办? – DRapp 2011-05-20 13:53:15
谢谢@DRapp如果我可以做到这一点,而不使用group_concat,那么这将是伟大的。我该怎么做呢?由于“小组”会自行返回随机蔬菜。如果两个蔬菜价格相同,那么返回哪一个蔬菜并不重要。 – spiderplant0 2011-05-20 13:56:58