我在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附近“)”
答案 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()
,这使得这更简单)。