2

1group_concatつの列からすべての文字列を返す があります。文字列は可変長にすることができます。によって返された最初の文字列を選択するにはどうすればよいですか(「最初」は順序group_concatによって定義されます)。group_concat


簡単な例を次に示します。野菜の表から、各野菜の種類から最も安い野菜を選択します。

この表から:

ベジタイプ 価格
----------------------
にんじんの根 1.23
カブの根 0.45
もやしのつぼみ 3.56
...

これを選択します:

選択した野菜の価格
-------------------
カブ 0.45
もやし 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が常に 1 つあるようにしました。LOCATE

を2回実行する必要があるため、これはあまり効率的ではないようですGROUP_CONCAT(実際の問​​題では非常に複雑です)。

ありがとう。

4

1 に答える 1

0

事前クエリを使用して「TYPE」ごとの最小価格を取得し、次にそれに参加します...

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

このクエリは、特定の種類の最低価格ですべての野菜を返します。単一の行が必要な場合は、

GROUP_CONCAT( v2.Veg... ) を SelectedVeg として使用する v2.Veg

クエリの最後に GROUP BY v2.Type を追加します....あなたの選択。

于 2011-05-20T14:08:20.120 に答える