zoukankan      html  css  js  c++  java
  • 面试遇到的问题 老猫

    一个表,两个字段,A、B,取出每个A类型的B由大到小排列的前两个。

    create table test_a
    (
       a varchar2(10),
       b int
    )
    truncate table test_a;

    insert into test_a values ('a',10);
    insert into test_a values ('a',1);
    insert into test_a values ('a',2);
    insert into test_a values ('a',3);
    insert into test_a values ('a',4);
    insert into test_a values ('a',5);
    insert into test_a values ('a',6);
    insert into test_a values ('b',12);
    insert into test_a values ('b',14);
    insert into test_a values ('b',1);
    insert into test_a values ('b',6);
    insert into test_a values ('c',2);
    insert into test_a values ('c',4);
    insert into test_a values ('c',4);
    insert into test_a values ('c',5);
    insert into test_a values ('c',3);
    insert into test_a values ('c',15);
    insert into test_a values ('d',1);
    insert into test_a values ('d',0);
    insert into test_a values ('d',8);
    insert into test_a values ('d',6);
    insert into test_a values ('d',4);
    insert into test_a values ('d',3);
    commit;

    --杨毅给出的答案如下 (没有使用分析函数)

    --测试结果显示没显示去重,不过与题干无关。

    SELECT *
      FROM TEST_A A
     WHERE A.B IN
           ((SELECT MAX(B.B) FROM test_a B WHERE A.A = B.A) UNION
            (SELECT MAX(C.B)
               FROM TEST_A C
              WHERE A.A = C.A
                AND C.B NOT IN
                    (SELECT MAX(D.B) FROM TEST_A D WHERE A.A = D.A)))
     ORDER BY A.A ASC, A.B DESC;

    --本人答案 (使用分析函数)


    SELECT * FROM (
     SELECT a, b, ROW_NUMBER()
      OVER (
        PARTITION BY a ORDER BY b DESC
      ) Top2 FROM test_a
    )
    WHERE Top2 <= 2 ;

  • 相关阅读:
    第三章 Java程序优化(待续)
    第二章 设计优化(待续)
    第一章 Java性能调优概述
    第十章 Executor框架
    第九章 Java中线程池
    第八章 Java中的并发工具类
    第七章 Java中的13个原子操作类
    Hihocoder [Offer收割]编程练习赛70 解题报告 By cellur925
    USACO Training刷题记录 By cellur925
    Trie树的小应用——Chemist
  • 原文地址:https://www.cnblogs.com/oldcat/p/2134209.html
Copyright © 2011-2022 走看看