68598


以下のHAVINGを使って条件を書いているところをWHEREを使って表してみたいです。  
可能ですか？

[code]

    SELECT 費目, MAX(出金額) AS 最大出金額 FROM 家計簿アーカイブ GROUP BY 費目 HAVING AVG(出金額) >= 5000;
    
[/code]

自分で考えたものがこちらです。

[code]

    SELECT 費目, MAX(出金額) AS 最大出金額 FROM 家計簿アーカイブ WHERE 5000 <= (SELECT AVG(出金額) FROM 家計簿アーカイブ GROUP BY 費目)  GROUP BY 費目 ;
    
[/code]


CC BY-SA 4.0
2020-07-14T16:45:58.210
68595
2020-07-14T23:12:58.960
40856
question
sql
SQLのHAVINGを副問い合わせとWHERE文を使って表したい


下記のSQLのように副問い合わせで費目を限定することで目的を達成することができます。

[code]

    SELECT 費目, MAX(出金額) AS 最大出金額
    FROM   家計簿アーカイブ SRC
    WHERE  5000 <= (SELECT AVG(出金額)
                    FROM 家計簿アーカイブ TEMP
                    WHERE SRC.費目 = TEMP.費目)
    GROUP BY 費目;
    
[/code]

@zunda さんが考えたSQLは、費目が複数ある場合は副問い合わせで複数の値が返ってくるのでエラーになります。

テーブル作成例

[code]

    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);
    
[/code]

[SQL Fiddle](http://sqlfiddle.com/#!9/979503/1)


CC BY-SA 4.0
2020-07-14T23:12:58.960
68598
2020-07-14T23:12:58.960
9820
68595
answer