mysql中的简单复杂查询
我在mysql中编写了一个简单复杂的查询:mysql中的简单复杂查询,mysql,sql,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附近的“)”FROM子句中的所有子查询都需要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附近的“)”FROM子句中的所有子查询都需要MySQL中的别名:
SELECT bcode, MAX(c)
FROM (SELECT bcode, COUNT(*) as c
FROM register
GROUP BY bcode
) c;
注意:上面的查询返回一个不确定的值bcode
以及最大计数。它使用MySQL的(mis)功能,允许在聚合查询中选择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()
,这使它更简单)