SQL综合应用学习(二)

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

8.统计列印各科成绩,各分数段人数:
 课程ID,课程名称,[100-85],[85-70],[70-60],[<60]

 尽管表面看上去不那么容易,其实用CASE可以很容易地实现:

 SELECT课程ID,课程名称
        ,SUM(CASEWHEN成绩BETWEEN85AND100THEN1ELSE0END)AS[100-85]
        ,SUM(CASEWHEN成绩BETWEEN70AND85THEN1ELSE0END)AS[85-70]
        ,SUM(CASEWHEN成绩BETWEEN60AND70THEN1ELSE0END)AS[70-60]
        ,SUM(CASEWHEN成绩<60THEN1ELSE0END)AS[60-]
   FROM成绩表
GROUPBY课程ID,课程名称

 注意这里的BETWEEN,虽然字段名都是从高至低,可BETWEEN中还是要从低到高,这里
 如果不小心,会犯一个很难发现的逻辑错误:在数学上,当a>b时,[a,b]是一个空集。

9.列印学生平均成绩及其名次

 selectcount(distinctb.f)as名次,a.学生ID,max(a.学生姓名),max(a.f)
   from(selectdistinctt.学生ID,t.学生姓名,(selectavg(成绩)
                                                fromtt1
                                               wheret1.学生id=t.学生id)asF
           fromT
        )asa,
        (select distinct t.学生ID,t.学生姓名,(selectavg(成绩)
                                                  fromtt1
                                                 wheret1.学生id=t.学生id)asF
           fromT
        )asb
  wherea.f<=b.f
groupbya.学生ID
orderbycount(b.f)

 这里有很多值得一提的地方,先利用两个完全相同的自相关子查询生成两个派生表作
 为基本表用于作小于或等于的连接,这样就可以通过表中小于或等于每个值的其他值
 的COUNT(distinct)的计数聚集函数来体现名次了。

 SELECT1+(SELECTCOUNT(distinct[平均成绩])
             FROM(SELECT[学生ID],MAX([学生姓名])AS学生姓名,AVG([成绩])AS[平均成绩]1 <script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

SQL综合应用学习!!

2009年09月13日 114KB 下载

数据库实验 南邮 SQL

2013年04月10日 180KB 下载

multism经典学习例子全

2011年11月14日 687KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭