>我有以下查询:
"INSERT INTO `occ_apps` (`occ_date`, `service_tag`, `counter`) VALUES (?, ?, '1') ON DUPLICATE KEY UPDATE `counter` = (`counter`+1)"
目前,当 occ_date
或 service_tag
在一行中匹配时,它会递增counter
。其中occ_date
和service_tag
是unique
字段,我无法为两个唯一字段设置主键。
我运行了以下内容:
ALTER TABLE occ_apps
DROP PRIMARY KEY,
ADD PRIMARY KEY (occ_date, service_tag);
我得到错误:
`#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key`
我希望它仅在occ_date
并在一行中service_tag
两个匹配项(已经存在)时才更新(递增)计数器,否则它应该插入一个新行。
Software version: 5.5.53-MariaDB-1~wheezy - mariadb.org binary distribution
当我跑DESC occ_apps
时,我得到:
Field Type Null Key Default Extra
serial_no int(255) NO PRI NULL auto_increment
occ_date varchar(255) NO UNI NULL
counter int(255) NO NULL
service_tag varchar(255) YES UNI NULL
我认为您甚至不需要表中的计数器字段。看起来您的计数器只是保存给定值出现的次数。这是可以使用GROUP BY轻松生成的东西
SELECT occ_date, COUNT(*) FROM occ_apps GROUP BY `occ_date`;
因此,您想过滤查询,以便仅获得至少具有 5 个计数的项目?
SELECT occ_date, COUNT(*) FROM occ_apps WHERE service_tag = 'service-1'
GROUP BY `occ_date` HAVING COUNT(*) > 5
这类问题已经使用GROUP BY解决了数百万次。就SQL查询聚合可以做什么而言,这只是冰山一角。请花点时间阅读它。