我的这个sql语句为什么会错?

andycpp 2011-03-24 05:54:45
表结构:
id,class,stu
1, one, Andy
2, one, Jack
3, two, Lucy
很简单的表,三列分别是:主键,班级,学生姓名

要查询:人数最多的班级到底有多少人。
书上给的正确查询是这样的,运行没问题:
select max(x.how_many)
from (select count(*) how_many
from t3
group by class) x;


我自己构造了一个查询,自我感觉完全正确,但是系统提示错误:
select max(
(select count(*) how_many
from t3
group by class));


错误信息为(我的是MySql 5.5.10):
Error Code: 1242
Subquery returns more than 1 row


他居然说子查询返回了多于一行的数据,所以错了。这让我不能接受啊,max函数不就是需要多行数据才能找到最大值吗?为什么会错啊??求高手指点!!!
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
王向飞 2011-03-24
  • 打赏
  • 举报
回复
MIN([DISTINCT] expr), MAX([DISTINCT] expr) 
返回expr 的最小值和最大值。 MIN() 和 MAX() 的取值可以是一个字符串参数;在这些情况下, 它们返回最小或最大字符串值。请参见7.4.5节,“MySQL如何使用索引”。 DISTINCT关键词可以被用来查找expr 的不同值的最小或最大值,然而,这产生的结果与省略DISTINCT 的结果相同。
若找不到匹配的行,MIN()和MAX()返回 NULL 。
mysql> SELECT student_name, MIN(test_score), MAX(test_score)
-> FROM student
-> GROUP BY student_name;
对于MIN()、 MAX()和其它集合函数, MySQL当前按照它们的字符串值而非字符串在集合中的相关位置比较 ENUM和 SET 列。这同ORDER BY比较二者的方式有所不同。这一点应该在MySQL的未来版本中得到改善。
王向飞 2011-03-24
  • 打赏
  • 举报
回复
你查查函数的用法就明白了[Quote=引用 3 楼 andycpp 的回复:]
谢楼上的回复,我知道你的是对的
你是把子查询直接写到from子句里了

但我把子查询直接写到max函数里为啥不对啊?我要问的是这个!!
[/Quote]
andycpp 2011-03-24
  • 打赏
  • 举报
回复
回2楼,是一张表,但是只有一列啊,这也不能放max里面吗??
百年树人 2011-03-24
  • 打赏
  • 举报
回复
select top 1 count(*) how_many
from t3
group by class
order by 1 desc
andycpp 2011-03-24
  • 打赏
  • 举报
回复
谢楼上的回复,我知道你的是对的
你是把子查询直接写到from子句里了

但我把子查询直接写到max函数里为啥不对啊?我要问的是这个!!
王向飞 2011-03-24
  • 打赏
  • 举报
回复
max 里面你放的什么?一张表?
-狙击手- 2011-03-24
  • 打赏
  • 举报
回复
select max(how_many)
from
(select count(*) how_many
from t3
group by class) t;


34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧