0

基本的に、特定の値(私の場合はCOMMUNICATIONS_ID)が等しい場合に、計算フィールドの値を合計しようとしています。これらのスコアは同じCOMMUNICATIONS_IDに関連付けられており、これらの値を合計したいと思います。

私は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
4

2 に答える 2

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

ここでテーブルをそれ自体に結合する必要はないと思います。

于 2011-01-26T22:36:50.177 に答える
1

INNER JOINの結果が同じであっても、ON条件とWHERE条件を分割する方がよい場合があります。2つのテーブルをリンクするものが明確になります。

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レコードを検索するCOMM_TYPE_ID=4
  • COMMUNICATIONS_IDがcal1と等しいcal2に参加(自己参加)
  • cal2からいくつかの列を合計します

フィルタのCOMMS_TYPE_ID=4結果が複数cal1.COMMUNICATIONS_IDの場合は、COMMUNICATIONS_IDが必要になりますGROUP BY(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
于 2011-01-26T22:32:15.947 に答える