今天看到博客園的一個sql題目,《這道SQL筆試題你會怎麼寫》html
本文版權歸七種武器和博客園共同全部,歡迎轉載,但必須保留聲明。並給出原文連接,謝謝合做sql
寫了好久不知道怎麼用獲取組函數的第一條數據。而後查資料看評論,才發現須要 ROW_NUMBER() OVER()函數。
才發現這段時間接觸sql太少了。寫sql好生疏,在這裏就總結下經常使用的分析函數
1.ROW_NUMBER() OVER()函數
row_number() over ([partition by col1] order by col2) ) as 別名
表示根據col1分組,在分組內部根據 col2排序
而這個「別名」的值就表示每組內部排序後的順序編號(組內連續的惟一的),
[partition by col1] 可省略。
2.DBMS_RANDOM.value(num1,num2)獲取num1,和num2間的隨機數
3.組函數 MAX(),MIN(),AVG(),SUM()___GROUP BY___HAVING MIN()>100函數
1 DECLARE 2 I INT := 1; 3 BEGIN 4 LOOP 5 INSERT INTO T_ACCOUNT VALUES (I, I * 4); 6 INSERT INTO T_TRANS 7 VALUES 8 (I, SYSDATE, ROUND(DBMS_RANDOM.VALUE(0, 2000))); 9 EXIT WHEN I = 1000; 10 I := I + 1; 11 END LOOP; 12 END;
SELECT T.ACCOUNT_ID, TT.SALES, TT.TRANS_TIME FROM T_ACCOUNT T, (SELECT T.ACCOUNT_ID, T.TRANS_TIME, T.SALES, ROW_NUMBER() OVER(PARTITION BY T.ACCOUNT_ID ORDER BY T.TRANS_TIME) RN FROM T_TRANS T) TT WHERE T.ACCOUNT_ID = TT.ACCOUNT_ID(+) AND TT.RN = 1 AND TT.SALES > 1000;
本文版權歸七種武器和博客園共同全部,歡迎轉載,但必須保留聲明。並給出原文連接,謝謝合做spa