mysql - выберите первый элемент, возвращаемый group_concat - PullRequest
1 голос
/ 20 мая 2011

У меня есть 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 находит первую запятую.И тогда подстрока возвращает все символы до этой запятой.Таким образом, selectedVeg равно «репа».

Я добавил «concat», чтобы убедиться, что для поиска всегда есть одна запятая.

Это не кажется очень эффективным, так как group_concat долженбыть запущенным дважды (и это довольно сложно в моей актуальной проблеме).Благодаря.

1 Ответ

0 голосов
/ 20 мая 2011

Используйте предварительный запрос, чтобы получить наименьшую цену за «ТИП», затем присоединитесь к ТО ...

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 в конецзапроса .... Ваш выбор.

...