質問: 以下のHAVINGを使って条件を書いているところをWHEREを使って表してみたいです。 可能ですか? ``` SELECT 費目, MAX(出金額) AS 最大出金額 FROM 家計簿アーカイブ GROUP BY 費目 HAVING AVG(出金額) >= 5000; ``` 自分で考えたものがこちらです。 ``` SELECT 費目, MAX(出金額) AS 最大出金額 FROM 家計簿アーカイブ WHERE 5000 <= (SELECT AVG(出金額) FROM 家計簿アーカイブ GROUP BY 費目) GROUP BY 費目 ; ```
回答: 下記のSQLのように副問い合わせで費目を限定することで目的を達成することができます。 ``` SELECT 費目, MAX(出金額) AS 最大出金額 FROM 家計簿アーカイブ SRC WHERE 5000 <= (SELECT AVG(出金額) FROM 家計簿アーカイブ TEMP WHERE SRC.費目 = TEMP.費目) GROUP BY 費目; ``` @zunda さんが考えたSQLは、費目が複数ある場合は副問い合わせで複数の値が返ってくるのでエラーになります。 テーブル作成例 ``` CREATE TABLE 家計簿アーカイブ(日付 DATE, 費目 VARCHAR(20), メモ VARCHAR(100), 入金額 INTEGER, 出金額 INTEGER); -- 表示される INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','hoge','',0,4000); INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','hoge','',0,6000); -- 平均出金額5000未満なので表示されない INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','fuga','',0,1000); INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','fuga','',0,1000); INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','fuga','',0,7000); INSERT INTO 家計簿アーカイブ VALUES('2012-12-10','給料','11月の給料',280000,0); INSERT INTO 家計簿アーカイブ VALUES('2013-01-10','給料','12月の給料',280000,0); ``` SQL Fiddle