mysql - 选择group_concat返回的第一个项目

时间:2011-05-20 13:29:47

标签: mysql group-by group-concat

我有一个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必须运行两次(在我的实际问题中它非常复杂)。 感谢。

1 个答案:

答案 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 ....您的选择。