我从这样的查询开始:
insert into summary ( col1, col2, Total )
select col1, col2, count(col4) as total from importdata
where col1 = 'abc' and col4 in ('1A', '2A')
group by col1, col2
order by col1, col2
我无法确定正确的'重复'条款。我认为我需要的条款是
on duplicate key update total=count(col4)
我把它放在查询的最后一行,并作为where子句之后的行,但都产生了错误。我的条款是否正确,它需要去哪里?
(最坏的情况我可以使用'insert ignore',但我认为更新会更好。)
答案 0 :(得分:0)
您不能在COUNT
子句中使用ON DUPLICATE KEY UPDATE
或其他组功能。你可以做的是:
INSERT INTO summary ( col1, col2, Total )
SELECT col1, col2, count(col4)
FROM importdata
WHERE col1 = 'abc' AND col4 IN ('1A', '2A')
GROUP BY col1, col2
ORDER BY col1, col2
ON DUPLICATE KEY UPDATE Total = VALUES(Total)
这就是说,如果存在重复键,则只需将列total
设置为您在Total
中插入的值,而不是插入新行。请注意,我删除了as total
- 这会导致问题,因为您已经有一个名为Total
的列,并且名称不区分大小写。
答案 1 :(得分:0)
您不能使用函数进行重复键更新,但是,您可以创建变量然后使用该变量。
INSERT INTO summary (col1, col2, Total)
select col1, col2, @totalCount := count(col4) as Total from importdata
where col1 = 'abc' and col4 in ('1A', '2A')
group by col1, col2
order by col1, col2
) ON DUPLICATE KEY UPDATE Total = @totalCount;