1、選前幾條數據
select top 10 orderid,amt=unitprice*quantity
from ordredetails
order by amt desc
2.利用group by 子句對select命令所選數據分組。分組後可以顯示出來
group by是除了不含匯總函數(sum,avg,count,min,max等以外的列)
select prod_id,sum(qty*unit_price) tot_amt
from sale_item
group by prod_id
order by tot_amt desc
3.group by 子句還可以加 with cube語句,加上with cube語句,其返回的數據除了和沒有with cube語句一樣外,,另外它會得到一些加總列。
select sup_id,prod_id ,sum(qty*unit_price),sum(qty) tot_amt
from sale_item
groupby sup_id,prod_id with cube
將有對應每個sup_id的加總列,每個prod_id 的加總列,和null,null全部的加總列
4.with cube語句換成with rollup ,則只返回最高層次的group列(最靠近group by的列的加總)
上面的例子,只返回sup_id的加總列,每個sup_id後有個加總列
5。使用grouping區分空值
cube操作生成的空值null帶來一個問題,即如何區分cube操作生成的null值和實際數據中返回的null值。這個問題,可以用grouping函數解決。如果列中的值來自事實數據,則grouping函數返回0,如果列中的值是cube操作所生成的null,則返回1。在cube操作中,所生成的null代表全體值。可將select語句寫成使用grouping函數將null替換為字符串all。
因為事實數據中的null表名數據值未知,所以select語句還可以用字符串unknow替代來自事實數據的null。
select productid,grouping(productid),orderid,grouping(orderid),sum(quantity)
from order
group by productid,orderid
with cube
order by productid,orderid
6.group by 子句經常會和having子句搭配,用來找出每個組別中滿足指定條件的數據,以下命令由產品文件中找出代碼重復者,也就是同一型產品有兩家以上的供應商。
select prod_id,count(*) from stock
group by prod_id
having count(*)>1