找回密码
 立即注册
搜索
查看: 749|回复: 10

求一SQL语句

[复制链接]

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
发表于 2005-12-15 22:57:10 | 显示全部楼层 |阅读模式
有一表“classes",表下有几个字段:开课系别,开课课程,课程名称,课程容量,教室
要用select语句找出开课最多的系。

哪位高人出手相救一下。。。
http://bbs.highot.net/forum.php?mod=viewthread&tid=136714&extra=page%3D1

2

主题

202

回帖

301

积分

中级会员

积分
301
发表于 2005-12-16 01:59:24 | 显示全部楼层
供参考,可能不是最优,但应该能满足要求.
这里,其中字段对应关系:
DeptID:开课系别
classid:开课课程

  1. SELECT deptid
  2. FROM
  3. (
  4.     SELECT deptid, COUNT(classid) AS classNumber
  5.     FROM classes
  6.     GROUP BY deptid
  7. ) AS temp1
  8. WHERE
  9. (classNumber =
  10.     (
  11.     SELECT MAX(classNumber) AS maxClassNumber
  12.     FROM
  13.         (
  14.             SELECT deptid, COUNT(classid) AS classNumber
  15.             FROM classes
  16.             GROUP BY deptid
  17.         ) temp2
  18.     )
  19. )
复制代码

[ 本帖最后由 找路人 于 2005-12-16 18:44 编辑 ]
回复

使用道具 举报

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
 楼主| 发表于 2005-12-16 13:28:19 | 显示全部楼层
谢谢楼上,已经按照思路解决了。期待其它方法。。
http://bbs.highot.net/forum.php?mod=viewthread&tid=136714&extra=page%3D1
回复

使用道具 举报

48

主题

680

回帖

961

积分

金牌会员

积分
961
发表于 2005-12-23 09:57:06 | 显示全部楼层
这个写法更加简洁
select DeptID  from classes group by DeptID  having count(classid)=max(count(classid))
在sybase里面验证通过;19
回复

使用道具 举报

2

主题

202

回帖

301

积分

中级会员

积分
301
发表于 2005-12-23 17:19:24 | 显示全部楼层
是够简洁,不过在 sql server 2000 下运行不通过.
不能对包含聚合或子查询的表达式执行聚合函数...:s
回复

使用道具 举报

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
 楼主| 发表于 2005-12-25 12:50:41 | 显示全部楼层
原帖由 ahjf 于 2005-12-23 09:57 发表
这个写法更加简洁
select DeptID  from classes group by DeptID  having count(classid)=max(count(classid))
在sybase里面验证通过;19


SQL-3里面是不允许对聚集函数使用嵌套的。
http://bbs.highot.net/forum.php?mod=viewthread&tid=136714&extra=page%3D1
回复

使用道具 举报

133

主题

1725

回帖

2464

积分

论坛元老

如今的南泥湾,处处是荒山

积分
2464
发表于 2006-1-5 13:33:45 | 显示全部楼层
MAX()就可以
回复

使用道具 举报

327

主题

3264

回帖

3641

积分

荣誉版主

积分
3641
发表于 2006-1-7 13:20:28 | 显示全部楼层
select 开课系别,count(开课系别)
from classes
group by 开课系别
order by 开课系别 desc


这样就可以了吧,根据不同的数据库,取出第1条,就是最多的
回复

使用道具 举报

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
 楼主| 发表于 2006-1-14 14:13:11 | 显示全部楼层
原帖由 厨师 于 2006-1-7 13:20 发表
select 开课系别,count(开课系别)
from classes
group by 开课系别
order by 开课系别 desc


这样就可以了吧,根据不同的数据库,取出第1条,就是最多的


这样的话还需要人工筛选,我需要的结果是直接由select给出来得最终结果,并且结果可能不止一个呀,可能有并列多个的情况。
http://bbs.highot.net/forum.php?mod=viewthread&tid=136714&extra=page%3D1
回复

使用道具 举报

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
 楼主| 发表于 2006-1-14 14:14:18 | 显示全部楼层
其实这是一个比较典型的SQL应用,MSSQL: 这个通过,而且比较简捷。


  1. select department from classes group by department having count(*) >= all(select count(*) from classes group by department)
复制代码
http://bbs.highot.net/forum.php?mod=viewthread&tid=136714&extra=page%3D1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-17 06:20 , Processed in 0.085492 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表