このSQLクエリをより効率的にするにはどうすればよいですか?SQLクエリをより効率的にする
SELECT
(SELECT COUNT(*) FROM table WHERE price < 10) AS priceUnder10,
(SELECT COUNT(*) FROM table WHERE price BETWEEN 10 AND 20) AS price10to20,
(SELECT COUNT(*) FROM table WHERE price > 20) AS priceOver20,
(SELECT COUNT(*) FROM table WHERE colour = 'Red') AS colourRed,
(SELECT COUNT(*) FROM table WHERE colour = 'Green') AS colourGreen,
(SELECT COUNT(*) FROM table WHERE colour = 'Blue') AS colourBlue;
私はすでにprice
とcolour
列に対するインデックスを持っているので、私はデータを集計するためのより良い方法を探しています。
私はGROUP BY
,HAVING
の自己結合とウィンドウ関数を使用してみましたが、同じ結果を得る方法はありません。
ご迷惑をおかけして申し訳ございません。
おかげで、偉大な答えが、なぜ 'WHERE'必要がありますか? – gjb
@gjb - あなたは1,000,000の行テーブルを持っていて、1行だけが '' Red ''、 'Green'、 'Blue' 'に非nullの価格や色を持つと想像しているかもしれません。他の999,999行は、結果との違いはありますが、それでもスキャンされません。もちろん、あなたのデータにはこのディストリビューションがないことを知っているかもしれません( 'price'はnull値ではないかもしれません)。 –