MySQLはgroup byでrollupを行います
4894 ワード
MySQL 4.1.1以降のバージョンではWITH ROLLUP修飾子(modifier)がサポートされ、出力されたセットフィールドを統計できます.年間のワイン販売総額を検索します.
クエリー結果の一部:
クエリーにWITH ROLLUPを付けると
クエリの結果には、次の行が追加されます.
この行を多くすると、年はnullを表示し、sum(price)は売上高の合計であり、このような処理は次のコードの実行を省くことができます.
各ワインの販売総額を探し出す:検索の過程で、産酒区(region)、酒場表(winery)を加えて、WITH ROLLUPを使って各酒場と産酒区の販売金額の肝心な点を得ることができます:GROUP BY句の中でregionとwinery表の唯一の値を使います.
クエリー結果の一部:
6行目はanderson wines酒場の総売上高(上位5行の和)を示し、同様に他の酒場の総売上高がその酒場データの後ろに表示され、barissa地区のすべての酒場の照会が完了するとbarissa地区の総金額がwinery_に表示されます.nameとwine_idはnullの行で、最後の行は、すべての地域、酒場、酒品種の売上高の合計です.
WITH ROLLUPの特徴: ORDER BY句はWITH ROLLUPと同時に使用できません. 出力生成後にLIMIT句が使用されるため、合計NULLのデータ行が常に含まれる.
SELECT year,sum(price) FROM wine
INNER JOIN items ON wine.id = items.wine_id
GROUP BY year;
クエリー結果の一部:
year sum(price)
1980 2056.12
1981 16234.78
...
2007 18000.12
2008 20183.34
クエリーにWITH ROLLUPを付けると
SELECT year,sum(price) FROM wine
INNER JOIN items ON wine.id = items.wine_id
GROUP BY year
WITH ROLLUP;
クエリの結果には、次の行が追加されます.
year sum(price)
1980 2056.12
1981 16234.78
...
2007 18000.12
2008 20183.34
NULL 5893233.21
この行を多くすると、年はnullを表示し、sum(price)は売上高の合計であり、このような処理は次のコードの実行を省くことができます.
SELECT sum(price) FROM wine
INNER JOIN items ON wine.id = items.wine_id;
各ワインの販売総額を探し出す:検索の過程で、産酒区(region)、酒場表(winery)を加えて、WITH ROLLUPを使って各酒場と産酒区の販売金額の肝心な点を得ることができます:GROUP BY句の中でregionとwinery表の唯一の値を使います.
SELECT region_name,winery_name,wine_id,sum(price) FROM region
INNER JOIN winey ON region.id = winery.region_id
INNER JOIN wine ON wine.winery_id = winery.id
INNER JOIN items ON wine.id = items.wine_id
GROUP BY region_name,winery_name,wine.id
WITH ROLLUP;
クエリー結果の一部:
region_name winery_name wine_id sum(price)
barissa anderson wines 112 682.3
barissa anderson wines 113 732.4
barissa anderson wines 114 1123.3
barissa anderson wines 115 68.1
barissa anderson wines NULL 2001.8
...
barissa NULL NULL 698403.5
...
NULL NULL NULL 4287403.6
6行目はanderson wines酒場の総売上高(上位5行の和)を示し、同様に他の酒場の総売上高がその酒場データの後ろに表示され、barissa地区のすべての酒場の照会が完了するとbarissa地区の総金額がwinery_に表示されます.nameとwine_idはnullの行で、最後の行は、すべての地域、酒場、酒品種の売上高の合計です.
WITH ROLLUPの特徴: