2016-05-22 7 views
0
String sql = "SELECT TYPE, SOURCE, SUM(AMOUNT) AS AMOUNT FROM INCOME WHERE TYPE = 'EARNED' " + 
        "AND DATE BETWEEN '" + year + "-" + month + "-" + "01' AND '" + year + "-" + month + "-" + day + "'"; 
      stmt = conn.createStatement(); 
      rs = stmt.executeQuery(sql); 

私はすべての収入を投資、ビジネス、給与などの形で保持している所得表を持っています。私はそれぞれのタイプの合計を引っ張りたい。私はすべての可能な収入を、3種類の収入、ポートフォリオ、または受動態に減らしました。私は1つの結果セットでそれぞれの合計(金額)を取得したいと思います。上記のコードは獲得したタイプの合計を選択するだけですが、他の2つのタイプを取得する方法はわかりません。何か助けてくれてありがとう。Java MySQLが1つの列を合計しながら複数の行を選択しています

+0

「GROUP BY TYPE」? – eggyal

答えて

2
String sql1 = "SELECT TYPE, SUM(AMOUNT) AS AMOUNT " + 
       "FROM INCOME " + 
       "WHERE DATE BETWEEN '" + year + "-" + month + "-" + "01' " + 
       "AND '" + year + "-" + month + "-" + day + "'"+ 
       "GROUP BY TYPE " ; 
stmt = conn.createStatement(); 
rs = stmt.executeQuery(sql1); 

このクエリは、各タイプ(獲得した、ポートフォリオ、または受動的)であなたの金額の合計を与えるだろう - これらは、あなたの収入テーブルの3種類ある場合

は、このように

+0

クエリの構文が正しくないため、実行されません。 – Nikem

+0

これは高速応答でした。どうもありがとうございました! –

2

を変更してくださいこれは条件付き集計と呼ばれます。

SELECT 
     SUM(CASE WHEN TYPE = 'EARNED' THEN AMOUNT ELSE 0 END) AS EARNED_cnt, 
     SUM(CASE WHEN TYPE = 'PASSIVE' THEN AMOUNT ELSE 0 END) AS PASSIVE_cnt, 
     SUM(CASE WHEN TYPE = 'PORFOLIO' THEN AMOUNT ELSE 0 END) AS PORFOLIO_cnt 
FROM INCOME 
+0

ここでは「GROUP BY」を使用しない方が良いでしょうか? –

+0

ああ、実際それは違ったことをする。あなたのケースでは各和の列がありますが、 'GROUP BY'は各和の行を作成します。 –

+0

@ YassinHajajそれは私が彼が望んだと思ったものです。 – sagi

0

文の末尾にグループを配置する必要があります。

String sql = "SELECT TYPE, SOURCE, SUM(AMOUNT) AS AMOUNT 
    FROM INCOME WHERE DATE BETWEEN '" + 
    year + "-" + month + "-" + "01' AND '" + 
    year + "-" + month + "-" + day + "' GROUP BY TYPE"; 
stmt = conn.createStatement(); 
rs = stmt.executeQuery(sql); 
関連する問題