0

私はという名前のテーブルを持っていますattproduct

3つの列がありますid, attribute, values

私はcolorbrandそれぞれidattribute列と対応する値をvalue列に持っています

SELECT id, MAX( IF( attribute =  'brand', value, NULL ) ) AS Brand,
       MAX( IF( attribute =  'color', value, NULL ) ) AS color
FROM fy.attproduct
GROUP BY id

このクエリを実行すると、必要に応じid, brand, colorて列として出力が表示されます。

クエリでのmaxの役割を知る必要があります。maxを削除すると、null値が返されます。

4

2 に答える 2

0

group by id指定されたIDに関連付けられているattproductのすべての行を1つの結果行にロールします。minやmaxなどのアグリゲーターを指定しない場合、結果にはソース行からランダムな値が選択されます(最初に見つかった可能性があります)。

于 2013-03-12T06:50:47.027 に答える
0

MAX()各IDに関連付けられた値を組み合わせています。

SELECT id, IF( attribute =  'brand', value, NULL ) AS Brand, IF( attribute =  'color', value, NULL ) AS color
FROM fy.attproduct

次のような行をGROUP BY返す必要があります

ID  Brand      color
1   'mybrand'  NULL
1   NULL       'mycolor'

が使用されていない場合MAX()、行の1つだけが選択されるため、少なくとも1つの列が選択されますNULL

于 2013-03-12T06:52:02.683 に答える