我有桌子,下面的结构.
TBL
id name
1 AAA
2 BBB
3 BBB
4 BBB
5 AAA
6 CCC
select count(name) c from tbl
group by name having c >1
Run Code Online (Sandbox Code Playgroud)
返回此结果的查询:
AAA(2) duplicate
BBB(3) duplicate
CCC(1) not duplicate
Run Code Online (Sandbox Code Playgroud)
重复的名称为AAA和BBB.最终结果,我想要的是这些重复记录的数量.
结果应如下所示:重复产品总数(2)
xda*_*azz 40
方法是使嵌套查询每个副本有一行,外部查询只返回内部查询结果的计数.
SELECT count(*) AS duplicate_count
FROM (
SELECT name FROM tbl
GROUP BY name HAVING COUNT(name) > 1
) AS t
Run Code Online (Sandbox Code Playgroud)
aru*_*aku 11
使用IF语句获得所需的输出:
SELECT name, COUNT(*) AS times, IF (COUNT(*)>1,"duplicated", "not duplicated") AS duplicated FROM <MY_TABLE> GROUP BY name
Run Code Online (Sandbox Code Playgroud)
输出:
AAA 2 duplicated
BBB 3 duplicated
CCC 1 not duplicated
Run Code Online (Sandbox Code Playgroud)
Tar*_*ryn 10
为什么不将它包装在子查询中:
SELECT Count(*) TotalDups
FROM
(
select Name, Count(*)
from yourTable
group by name
having Count(*) > 1
) x
Run Code Online (Sandbox Code Playgroud)
对于列表:
SELECT COUNT(`name`) AS adet, name
FROM `tbl` WHERE `status`=1 GROUP BY `name`
ORDER BY `adet` DESC
Run Code Online (Sandbox Code Playgroud)

总计数:
SELECT COUNT(*) AS Total
FROM (SELECT COUNT(name) AS cou FROM tbl GROUP BY name HAVING cou>1 ) AS virtual_tbl
Run Code Online (Sandbox Code Playgroud)
//总计:5
接受的答案计算具有重复项的行数,而不是重复项的数量.如果要计算重复的实际数量,请使用:
SELECT COALESCE(SUM(rows) - count(1), 0) as dupes FROM(
SELECT COUNT(1) as rows
FROM `yourtable`
GROUP BY `name`
HAVING rows > 1
) x
Run Code Online (Sandbox Code Playgroud)
这样做可以完成组中的重复项,但是然后减去具有重复项的记录数量.原因是group by total不是全部重复,每个分组的一个记录是唯一的行.
小提琴:http://sqlfiddle.com/#!2/29639a/3
| 归档时间: |
|
| 查看次数: |
54178 次 |
| 最近记录: |