金沙澳门官网网址-澳门金沙官网登录

金沙澳门官网网址拥有大量的原创内容,澳门金沙官网登录提供最权威、快速、全面、专业的报道,所以金沙澳门官网网址注册送彩金就相当于直接送现金了,享受最尊贵的贵宾服务。

第一种方案、最简单、普通的方法

2020-01-16 03:44栏目:金沙澳门官网
TAG:

1.相关数据表 Score表 [User]表 SQL语句如下: 复制代码 代码如下: --查询出各科成绩最好的学生信息 --自连接 --SELECT TOP 1 * FROM Score B WHERE B.ScoreName = '数学' ORDER BY B.Score DESC SELECT A.ID,U.Name,A.ScoreName,A.Score FROM Score A,[User]U WHERE UID IN (SELECT TOP 1 UID FROM Score B WHERE B.ScoreName = A.ScoreName ORDER BY B.Score DESC) AND A.UID=U.ID ORDER BY A.ScoreName, A.Score DESC 查询结果如下图:

最近面试遇到了一道面试题,顿时有点迷糊,只说出了思路,后来百度了一下,整理了一下思路,于是记录下来,方便以后学习。 相关的数据表: 1.Score表 2.[User]表 SQL语句如下: --方法一:静态SQL 复制代码 代码如下: SELECT * FROM (SELECT UID,Name, Score,ScoreName FROM Score,[User] WHERE Score.UID=[User].ID) AS SourceTable PIVOT(AVG(Score)FOR ScoreName IN ([英语], [数学])) AS a --方法二:动态SQL 复制代码 代码如下: DECLARE @s NVARCHAR(4000) SELECT @s = ISNULL(@s + ',', '') + QUOTENAME(ScoreName) FROM (select distinct ScoreName from Score) as A ---列名不要重复 Declare @sql NVARCHAR(4000) SET @sql=' select r.* from (select UID,Name,ScoreName,Score from Score,[User] where Score.UID=[User].ID) as t pivot ( max(t.Score) for t.ScoreName in ('+@s+') ) as r' EXEC( @sql) --方法三:Case When 复制代码 代码如下: select row_number() OVER(ORDER BY [User].ID) as 编号, UID as 用户编号, Name as 姓名, max(case ScoreName when '英语' then Score else 0 end) 英语, max(case ScoreName when '数学' then Score else 0 end) 数学 from Score,[User] WHERE Score.UID=[User].ID group by UID,[User].ID,Name

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2

 

 

第一种方案、最简单、普通的方法:

 

复制代码代码如下:

SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC  

 

     平均查询100次所需时间:45s

第二种方案:

 

复制代码代码如下:

SELECT * FROM (  SELECT TOP 30 * FROM (SELECT TOP 45030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC) s ORDER BY s.YEAR DESC,s.ID DESC  

 

     平均查询100次所需时间:138S

第三种方案:

 

复制代码代码如下:

SELECT * FROM ARTICLE w1, 
(
    SELECT TOP 30 ID FROM 
    (
        SELECT TOP 50030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC
    ) w ORDER BY w.YEAR ASC, w.ID ASC
) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC

 

     平均查询100次所需时间:21S

第四种方案:

复制代码代码如下:

SELECT * FROM ARTICLE w1 
    WHERE ID in 
        (
            SELECT top 30 ID FROM 
            (
                SELECT top 45030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC
            ) w ORDER BY w.YEAR ASC, w.ID ASC
        ) 
    ORDER BY w1.YEAR DESC, w1.ID DESC

 

     平均查询100次所需时间:20S

第五种方案:

 

复制代码代码如下:

版权声明:本文由金沙澳门官网网址发布于金沙澳门官网,转载请注明出处:第一种方案、最简单、普通的方法