总结MySQL计算字段,其中列值相同

时间:2011-01-26 22:29:11

标签: sql mysql group-by self-join

基本上,当某个值(在我的例子中为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 个答案:

答案 0 :(得分:3)

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

我认为没有必要在这里加入表格。

答案 1 :(得分:1)

分割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
  • COMM_TYPE_ID=4
  • 中查找cal1记录
  • 加入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