2014-06-18 45 views
0

我将如何去显示全部 SQL中最常见的值?如何在SQL中查找所有最常用的值?

所以我有查询以显示下面最常见的值。

SELECT name, COUNT(*) AS popularity 
FROM cattwo 
GROUP BY name 
ORDER BY popularity DESC 
LIMIT 1; 

    +----------+------------+ 
    | name  | popularity | 
    +----------+------------+ 
    | cat22610 |   7 | 
    +----------+------------+ 

然而,当我显示前10个最常用的值结果是...

SELECT name, COUNT(*) AS popularity 
FROM cattwo 
GROUP BY name 
ORDER BY popularity DESC 
LIMIT 10; 

    +----------+------------+ 
    | name  | popularity | 
    +----------+------------+ 
    | cat22610 |   7 | 
    | cat68704 |   7 | 
    | cat14153 |   7 | 
    | cat52476 |   7 | 
    | cat4556 |   7 | 
    | cat64173 |   7 | 
    | cat5586 |   7 | 
    | cat89302 |   6 | 
    | cat97131 |   6 | 
    | cat42010 |   6 | 
    +----------+------------+ 

目标是与人气最高,以显示所有的猫。像这样的东西。

+----------+------------+ 
| name  | popularity | 
+----------+------------+ 
| cat22610 |   7 | 
| cat68704 |   7 | 
| cat14153 |   7 | 
| cat52476 |   7 | 
| cat4556 |   7 | 
| cat64173 |   7 | 
| cat5586 |   7 | 
+----------+------------+ 

帮助会很好。提前致谢。

回答

1

我想这个查询会帮助你!

SELECT NAME, COUNT(*) AS POPULARITY 
FROM CATTWO 
GROUP BY NAME 
HAVING COUNT(*) = 
     (
      SELECT COUNT(*) AS MAX_POPULARITY 
      FROM CATTWO 
      GROUP BY NAME 
      ORDER BY MAX_POPULARITY DESC 
      LIMIT 1 
     ); 
1
SELECT name, COUNT(*) AS popularity 
FROM cattwo 
GROUP BY name 
HAVING COUNT(*) = 
     (
      SELECT COUNT(*) AS popularity 
      FROM cattwo 
      GROUP BY name 
      ORDER BY popularity DESC 
      LIMIT 1 
     ) 
LIMIT 10; 
0
select C1.name,COUNT(*) AS popularity FROM cattwo C1 GROUP BY C1.name 

HAVING 0=(SELECT COUNT(*) popularity FROM cattwo 
C2 GROUP BY C2.NAME HAVING C1.popularity <C2.popularity) 
相关问题