1. 创建固定大小的数据桶1.1. 数据放入若干个大小固定的桶(bucket)里,每个桶的元素个数是事先定好的1.1.1. 针对商值向上取整1.2. DB21.3. Oracle1.4. SQLServer1.5. 使用窗口函数ROW_NUMBEROVER1.5.1. sqlselectceil(row_number()over(orderbyempno)/5.0)grp,empno,enamefromemp1.6. PostgreSQL1.7. MySQL1.8. 使用标量子查询为每个EMPNO生成一个序号1.8.1. sqlselectceil(rnk/5.0)asgrp,empno,e
1. 变换结果集成一行1.1. 结果集DEPTNOCNT----------------1032053061.2. 结果集DEPTNO_10DEPTNO_20DEPTNO_30-----------------------------3561.3. sqlselectsum(casewhendeptno=10then1else0end)asdeptno_10,sum(casewhendeptno=20then1else0end)asdeptno_20,sum(casewhendeptno=30then1else0end)asdeptno_30fromemp1.3.1. 对于每一行的原始数据,
1. 结果集分页1.1. 只有做过了排序,才有可能准确地从结果集中返回指定区间的记录1.2. DB21.3. Oracle1.4. SQLServer1.5. sqlselectsalfrom(selectrow_number()over(orderbysal)asrn,salfromemp)xwherernbetween1and5SAL----8009501100125012501.5.2. sqlselectsalfrom(selectrow_number()over(orderbysal)asrn,salfromemp)xwherernbetween6and10SAL-----13001
1. 对于复杂的数值计算而言,SQL并非首选工具2. 求和2.1. SUM函数会忽略Null,但是我们可能会遇到Null分组2.2. sqlselectdeptno,commfromempwheredeptnoin(10,30)orderby1DEPTNOCOMM--------------------10101030300305003030030130030selectsum(comm)fromempSUM(COMM)----------2100selectdeptno,sum(comm)fromempwheredeptnoin(10,30)groupbydeptnoDEPTNOSUM(CO
1. 计算同一组或分区的行之间的差1.1. 最终结果集1.1.1. sqlDEPTNOENAMESALHIREDATEDIFF-----------------------------------------------10CLARK245009-JUN-1981-255010KING500017-NOV-1981370010MILLER130023-JAN-1982N/A20SMITH80017-DEC-1980-217520JONES297502-APR-1981-2520FORD300003-DEC-1981020SCOTT300009-DEC-1982190020ADAMS110012
1. 一个季度的开始日期和结束日期1.1. 以yyyyq格式(前面4位是年份,最后1位是季度序号)给出了年份和季度序号1.2. DB2数据库1.2.1. sql语句select(q_end-2month)q_start,(q_end+1month)-1dayq_endfrom(selectdate(substr(cast(yrqaschar(4)),1,4)||'-'||rtrim(cast(mod(yrq,10)*3aschar(2)))||'-1')q_endfrom(select20051yrqfromt1unionallselect20052yrqfromt1unionallsel
1. 计算一年有多少天1.1. 方案1.1.1. 找到当前年份的第一天1.1.2. 加上1年以得到下一年的第一天1.1.3. 得到的结果减去第一步得到的结果1.2. DB2数据库1.2.1. sql语句selectdays((curr_year+1year))-days(curr_year)from(select(current_date-dayofyear(current_date)day+1day)curr_yearfromt1)x1.3. Oracle数据库1.3.1. sql语句selectadd_months(trunc(sysdate,'y'),12)-trunc(sysdat
1. 两个日期之间相差的月份和年份1.1. DB21.2. MySQL1.3. sqlselectmnth,mnth/12from(select(year(max_hd)-year(min_hd))*12+(month(max_hd)-month(min_hd))asmnthfrom(selectmin(hiredate)asmin_hd,max(hiredate)asmax_hdfromemp)x)y1.4. Oracle1.4.1. sqlselectmonths_between(max_hd,min_hd),months_between(max_hd,min_hd)/12from(se
1. 年月日加减法1.1. DB21.1.1. sqlselecthiredate-5dayashd_minus_5D,hiredate+5dayashd_plus_5D,hiredate-5monthashd_minus_5M,hiredate+5monthashd_plus_5M,hiredate-5yearashd_minus_5Y,hiredate+5yearashd_plus_5Yfromempwheredeptno=101.2. Oracle1.2.1. sqlselecthiredate-5ashd_minus_5D,hiredate+5ashd_plus_5D,add_mo
1. 复制数据到另一个表1.1. sqlinsertintodept_east(deptno,dname,loc)selectdeptno,dname,locfromdeptwherelocin('NEWYORK','BOSTON')2. 复制表定义2.1. 复制表结构,而不复制数据2.2. MySQL2.3. PostgreSQL2.4. Oracle2.5. sqlcreatetabledept_2asselect*fromdeptwhere1=02.6. SQLServer2.6.1. sqlselect*intodept_2fromdeptwhere1=02.7. DB22.7.1