问题:在“学籍管理”数据库建立一个名为“学生平均分”的视图,显示学号和平均分字段,要求平均分为每个学生所有科目的平均分,排序方式为:按照平均分的降序排列。视图里的命令是这样的:SELECT     TOP (100) PERCENT 学号, AVG(成绩) AS 平均分
FROM         dbo.成绩表
GROUP BY 学号
ORDER BY 平均分 DESC最后结果为什么是按学号排序的,而不是平均分的????

解决方案 »

  1.   


    SELECT TOP (100) PERCENT 学号, AVG(成绩) AS 平均分
    FROM dbo.成绩表
    GROUP BY 学号
    ORDER BY AVG(成绩) DESC
      

  2.   


    --建视图对order by一般不处理,需要自己在查询视图的时候指定排序字段
    select * from 学生平均分 order by 平均分 desc
      

  3.   

    SELECT TOP (100) PERCENT 学号, AVG(成绩) AS 平均分
    FROM dbo.成绩表
    GROUP BY 学号
    ORDER BY  AVG(成绩)  DESC别名在输出后才能使用。
      

  4.   

    SELECT TOP (100) PERCENT 学号, AVG(成绩) AS 平均分
    FROM dbo.成绩表
    GROUP BY 学号
    ORDER BY AVG(成绩) desc
      

  5.   


    这个也试过了:
    ORDER BY AVG(成绩) DESC但是,结果还是一样挺郁闷的
      

  6.   

    视图无视ORDER BY,你要在查询视图时加ORDER BY,或者改用排序列而不是TOP生成视图
      

  7.   

    order by在视图中是起作用的,视图其实就是一张虚拟表的,按理来说表可以做的事情那么视图也
    可以做,但有的时候对视图进行增加,更新有好多的限制,实际当中我们一般用视图仅作查询即可
    --测试数据
    select id,[name], max(A) A,max(B) b,max(C) C
    from tb 
    group by id,[name]
    ---4.
    if object_id('tb') is not null drop table tb
    create table tb
    (
    id varchar(18),
    score int 
    )
    insert tb
    select '001',70 union all
    select '001',70 union all
    select '001',80 union all
    select '001',90 union all
    select '001',50 union all
    select '002',60 union all
    select '002',60 union all
    select '002',80 union all
    select '002',70 
    go 
    --创建视图
    if object_id('view_AvgScore') is not null drop view view_AvgScore
    go 
    create view view_AvgScore
    as
    select top 10 id,avg(score) as '平均份'
    from [tb]
    group by  id
    order by [平均份] desc--测试
    select * from view_AvgScore
    id                 平均份
    ------------------ -----------
    001                72
    002                67(2 行受影响)
      

  8.   

    1、from子句组装来自不同数据源的数据;
     2、where子句基于指定的条件对记录行进行筛选; 
    3、group by子句将数据划分为多个分组; 
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组; 
    6、计算所有的表达式; 
    7、使用order by对结果集进行排序。你查询出来的数据是否是按平均分排序?如果是这样,你看是否由于你先top了,所以出来的结果不是你想要的。