2011-01-26 24 views
0

基本的には、特定の値(私の場合はCOMMUNICATIONS_ID)が等しい場合、計算フィールドの値を合計しようとしています。これらの得点は同じCOMMUNICATIONS_IDに関連付けられており、これらの値を合計したいと思います。カラム値が同じであるMySQL計算フィールドの集計

は、私はSQLに新しいですし、これは私の見当違いの最初の試みである:

SELECT * 
FROM consumer_action_log as cal1 
JOIN consumer_action_log as cal2 
    ON cal1.COMMUNICATIONS_ID=cal2.COMMUNICATIONS_ID 
    AND cal1.COMM_TYPE_ID=4 
+1

合計するフィールド/列名は何ですか?また、テーブルの主キーは何ですか? CREATE TABLEステートメントを投稿することは本当に役に立ちます。データの例もあります。 –

+0

あなたはもっと具体的になりますか?何を合計しようとしていますか? – ash

+0

4つの関連する人に基づいて、4以外のcomm_type_idのレコードを合計しようとしていますか?そうでなければ、自己結合の必要はありません。 –

答えて

3
SELECT COMMUNICATIONS_ID, SUM(fieldName) 
FROM consumer_action_log 
WHERE COMM_TYPE_ID = 4 
GROUP BY COMMUNICATIONS_ID 

私はここで自分自身にテーブルを結合するために必要があると表示されません。

+0

私の答えに対するコメントを参照してください – RichardTheKiwi

+0

私は同意する、私は必要が表示されませんが、私は誰に投票する前にOPが明確にする必要があります。 –

1

それは良いかもしれ結果は内部結合のために同じであっても、ONと条件を分割します。 2つのテーブルをリンクするものを明確にします。 COMMUNICATIONS_IDが上のフィルタ場合CAL2

から

  • サムアップいくつかの列をCAL1に等しいCOMM_TYPE_ID=4
  • は(自己結合)CAL2に参加

    SELECT sum(cal2.somecolumn) 
    FROM consumer_action_log as cal1 
    JOIN consumer_action_log as cal2 
        ON cal1.COMMUNICATIONS_ID=cal2.COMMUNICATIONS_ID 
    WHERE cal1.COMM_TYPE_ID=4 
    
    • 検索CAL1レコードCOMMS_TYPE_ID=4の結果が複数のcal1.COMMUNICATIONS_IDである場合は、GROUP BY COMMUNICATIONS_IDになります(cal1またはcal2とは関係ありません。私)

      SELECT cal2.COMMUNICATIONS_ID, sum(cal2.somecolumn) 
      FROM consumer_action_log as cal1 
      JOIN consumer_action_log as cal2 
          ON cal1.COMMUNICATIONS_ID=cal2.COMMUNICATIONS_ID 
      WHERE cal1.COMM_TYPE_ID=4 
      GROUP BY cal2.COMMUNICATIONS_ID 
      
  • +0

    なぜ自己結合するのですか? –

    +0

    セルフ・ジョイン:同じCOMMUNICATIONS_IDであるが、同じCOMMUNICATIONS_IDに関連付けられた異なるCOMM_TYPE_IDの他のレコードを取得する – RichardTheKiwi

    +0

    有効、私はOPからの要件は表示されません。そうでない場合は、状況が変わる可能性があります。 –

    関連する問題