一个简单的复杂查询在mysql中

时间:2017-06-17 12:49:27

标签: mysql sql

我在mysql中编写了一个简单的复杂查询:

SELECT bcode, MAX(c)
from (SELECT bcode, COUNT(*) as c 
  FROM register 
  GROUP BY bcode)

但我有以下错误,为什么?

1.期待表达。 (靠近“(”在第27位)

2.意外的令牌。 (靠近“(”在第27位)

3.此类型的子句之前已被解析过。 (位置28处的“SELECT”附近)

4.意外的关闭支架。 (位置100附近“)”

1 个答案:

答案 0 :(得分:3)

FROM子句中的所有子查询都需要MySQL中的别名:

SELECT bcode, MAX(c)
FROM (SELECT bcode, COUNT(*) as c 
      FROM register 
      GROUP BY bcode
     ) c;

注意:上述查询返回bcode的不确定值以及最大计数。它使用MySQL的(错误)功能,允许SELECT中的聚合查询中未聚合的列。 (我可以注意到SQLite认识到上面的语法并且做了你想要的,但在我看来这只是一种憎恶。)

我怀疑这是你想要的。你可能打算:

SELECT bcode, COUNT(*) as c 
FROM register 
GROUP BY bcode
ORDER BY c DESC
LIMIT 1;

如果您希望所有bcodes都具有最大值,我想我会推荐

SELECT c, GROUP_CONCAT(bcode)
FROM (SELECT bcode, COUNT(*) as c 
      FROM register 
      GROUP BY bcode
     ) c
ORDER BY c DESC
LIMIT 1;

这将它们全部放在以逗号分隔的列表中的一行上。还有其他方法,但我认为这是MySQL中最简单的方法(几乎所有其他数据库都支持rank(),这使得这更简单)。