oracle笔记

今天看到博客园的一个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

相关文章
相关标签/搜索