none
菜鸟关于SQL查询语句问题 RRS feed

  • 问题

  • 您好,请问如何用SQL语言查询mokao表中4次模考中后3次考试数学成绩均在80分以上的学生?(每一行为考生姓名、编号、模考轮次、模考成绩等等的数据)。且输出要所有要素按姓名输出,排序按照第四次模考的成绩?或按照后3次模考的平均分?
    如:
    考生姓名(nam)    编号(cod)    模考轮次(tern)    模考成绩(sco)
    nam    cod    tern    sco
    A    1    1    85
    B    2    3    79
    C    3    2    95
    B    2    1    77
    A    1    4    90
    C    3    1    81
    A    1    3    85
    B    2    4    98
    C    3    3    88
    A    1    2    97
    B    2    2    97
    C    3    4    79
    查询后输出为:
    nam    cod    tern    sco
    A    1    1    85
    A    1    2    97
    A    1    3    85
    A    1    4    90
    2016年6月11日 13:18

答案

  • SELECT * FROM tb as a
    WHERE ( -- 最后3次平均分
    		SELECT AVG(sco) FROM(
    			SELECT TOP 3 * FROM tb as b
    			WHERE A.nam = B.nam AND A.cod = B.cod
    			ORDER BY b.tern DESC
    		) BB
    	) > 80
    ORDER BY
    	( -- 第4次
    		SELECT TOP 1 sco FROM(
    			SELECT TOP 4 * FROM tb as b
    			WHERE A.nam = B.nam AND A.cod = B.cod
    			ORDER BY b.tern
    		) BB
    		ORDER BY BB.tern DESC
    	)
    

    2016年6月12日 3:15
  • CREATE TABLE #tsco (NAME VARCHAR(100),code INT,tern INT,sco INT)

    INSERT [#tsco]  ( [NAME], [code], [tern], [sco] )
    select  'B'  ,  2  ,  3  ,  79 union all
    select  'C'  ,  3  ,  2  ,  95 union all
    select  'B'  ,  2  ,  1  ,  77 union all
    select  'A'  ,  1  ,  4  ,  90 union all
    select  'C'  ,  3  ,  1  ,  81 union all
    select  'A'  ,  1  ,  3  ,  85 union all
    select  'B'  ,  2  ,  4  ,  98 union all
    select  'C'  ,  3  ,  3  ,  88 union all
    select  'A'  ,  1  ,  2  ,  97 union all
    select  'B'  ,  2  ,  2  ,  97 union all
    select  'C'  ,  3  ,  4  ,  79

    SELECT * FROM [#tsco]

            SELECT  AVG(sco) AS '平均分' ,
                    name AS '姓名' ,
                    code
            FROM    [#tsco]
            WHERE   [tern] IN ( 2, 3, 4 )
            GROUP BY name ,
                    code
            ORDER BY  AVG(sco)

    Love SQL

    2016年6月12日 3:19

全部回复

  • SELECT * FROM tb as a
    WHERE ( -- 最后3次平均分
    		SELECT AVG(sco) FROM(
    			SELECT TOP 3 * FROM tb as b
    			WHERE A.nam = B.nam AND A.cod = B.cod
    			ORDER BY b.tern DESC
    		) BB
    	) > 80
    ORDER BY
    	( -- 第4次
    		SELECT TOP 1 sco FROM(
    			SELECT TOP 4 * FROM tb as b
    			WHERE A.nam = B.nam AND A.cod = B.cod
    			ORDER BY b.tern
    		) BB
    		ORDER BY BB.tern DESC
    	)
    

    2016年6月12日 3:15
  • CREATE TABLE #tsco (NAME VARCHAR(100),code INT,tern INT,sco INT)

    INSERT [#tsco]  ( [NAME], [code], [tern], [sco] )
    select  'B'  ,  2  ,  3  ,  79 union all
    select  'C'  ,  3  ,  2  ,  95 union all
    select  'B'  ,  2  ,  1  ,  77 union all
    select  'A'  ,  1  ,  4  ,  90 union all
    select  'C'  ,  3  ,  1  ,  81 union all
    select  'A'  ,  1  ,  3  ,  85 union all
    select  'B'  ,  2  ,  4  ,  98 union all
    select  'C'  ,  3  ,  3  ,  88 union all
    select  'A'  ,  1  ,  2  ,  97 union all
    select  'B'  ,  2  ,  2  ,  97 union all
    select  'C'  ,  3  ,  4  ,  79

    SELECT * FROM [#tsco]

            SELECT  AVG(sco) AS '平均分' ,
                    name AS '姓名' ,
                    code
            FROM    [#tsco]
            WHERE   [tern] IN ( 2, 3, 4 )
            GROUP BY name ,
                    code
            ORDER BY  AVG(sco)

    Love SQL

    2016年6月12日 3:19
  • 感觉问题问的不清楚。所以大家回答也有问题。后3次考试数学成绩均在80分以上的学生。是都在80分以上,不是平均分80分以上。 建议把问题列清楚点
    2016年6月12日 4:08
  • 感覺取出的資料,

    排序要依 第4次考的分數, 或依 後3次平均分 排序。

    好像沒有什麼關連呢!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2016年6月12日 4:24