SQL高级应用
Garin Zhang
追加:row_number, rank, dese_rank, ntile
1. row_number: 为查询出来的每一行记录生成一个序号。
SELECT row_number() OVER(ORDER BY field) AS row_n
from tablename;
分页查询:
with t_towtable
as (select row_number over(order by field1) as row_number from tb)
select * from t_rowtable where row_number > 1 and row_number > 4 order by field1;
ROW_NUMBER() OVER([<partition_by_caluse>] <order_by_clause>);
2. rank: 返回结果集的分区内每行的排名:
RANK() OVER([<partition_by_caluse_按照某个字段分区>]<order_by_clause_排序>);
Examples:
WITH CustomerSum AS
(SELECT CustomerID, SUM(totalDue) AS total
from sales GROUP BY CustomerID)
SELECT * RANK() OVER (ORDER BY total DESC) AS RANK
from CustomerSum
3. dense_rank: 顺序排序(生成的序号是连续的)。
4. ntile:取前多少个名次的排名的行。
SELECT SalesID, NTILE(1000) OVER(ORDER BY CustomerID) AS NTile
from Sales
桶数的计算:
if(记录数%桶数 == 0)
每桶记录数都为记数总数/桶数
else
recordCount1 = total/tongNum + 1;
int n = 1;
m = recordCont1*n;
while((total - m) % (tongNum - n)) != 0)
{
n++;
m = recordCount1 * n;
}
recordCount2 = (total - m) / (tongNum - n);
将前n个桶记录设置为recordCount1
将n+1个到后面所有桶记为recordCount2
相关文档:
SQL的操作:
E.g.
judging-表名
userid, name, password-表中的关键字
添加:
string sql = "insert into judging (userid,name,password) values('" + userid.Text.Trim() + "','" + name.Text.Trim() + "','" + password.Text.Trim() + "')";
删除:
string sql = "delete from judging where userid=" + ......
SQL Servertimestamp数据类型与时间和日期无关。SQL Servertimestamp是二进制数字,它表明数据库中数据修改发生的相对顺序。实现timestamp数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是timest ......
行列倒置在sql server中是一种很常见的技巧,在做应用系统的时候,经常需要做一些统计功能避免不了使用行列倒置这个技巧,我小小的做了一下总结:
第一种:sql server 2000中使用case进行行列倒置
create table RowCellConvertTest
(
grade varchar(50),
sex varchar(50),
studentCount int
)
......
应用中发现sql中的and及or的执行效率问题
sql语句,为什么把最后的or换成and,查询的就很快,使用的是mssql范例中northwind数据库为例,
select * from Orders a left join [Order Details] b on a.orderid = b.orderid
where a.customerid like '%ics%' or b.productid in (42,72)
追踪了语句的执行方案,发现 ......
INSERT INTO
tableName ( columnName1, columnName2, columnName3, columnName4)
VALUES ( '45', '西藏办', TO_Date( '2010-03-10 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), NULL,);
commit; ......