Суммирование вычисляемого поля MySQL, в котором значение столбца совпадает - PullRequest
0 голосов
/ 27 января 2011

В основном я пытаюсь суммировать значение вычисляемого поля, когда определенное значение (в моем случае 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

Ответы [ 2 ]

3 голосов
/ 27 января 2011
SELECT COMMUNICATIONS_ID, SUM(fieldName) 
FROM consumer_action_log
WHERE COMM_TYPE_ID = 4
GROUP BY COMMUNICATIONS_ID

Я не вижу необходимости присоединять таблицу к себе здесь.

1 голос
/ 27 января 2011

Может быть лучше разделить условия ON и WHERE, даже если результат одинаков для INNER JOIN.Делает понятнее, что связывает две таблицы.

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
  • Присоединиться к cal2 (самостоятельное соединение), где COMMUNICATIONS_ID равен cal1
  • Суммируйте некоторый столбец из cal2

Если фильтр на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...