`

网易昨天笔试题中一道SQL题,大家进来讨论下!

SQL 
阅读更多
首先,我答得不好,反思一下,基础不牢固。

题目是这样的:

表 User   userid    bigint
          username  varchar

表Message   messageId     bigint
            fromUserid    bigint
            toUserid      bigint
            sendtime      date

这是个发送聊天信息相关的两个表,现写出SQL语句,求出username = ‘TestUser’这个人最近联系的10个人(包括发送的和接受的人


我是没写出来(写了一个,现在想想肯定错了)。

各位看看,该怎么写这个SQL



我的答案;
select userid
  from (
        SELECT userid, max(sendtime)
          FROM (SELECT T2.TOUSERID AS USERID, T2.SENDTIME
                   FROM t_USER T1, t_MESSAGE T2
                  WHERE T1.USERNAME = 'TestUser'
                    AND T1.USERID = T2.FROMUSERID
                 UNION all
                 SELECT T2.FROMUSERID AS USERID, T2.SENDTIME
                   FROM t_USER T1, t_MESSAGE T2
                  WHERE T1.USERNAME = 'TestUser'
                    AND T1.USERID = T2.TOUSERID
                 )
         group by userid
         order by max(sendtime) desc) 
 WHERE ROWNUM <= 10;


这里主要有几个细节:
1、要用UNION all,而不能用UNION。UNION all是全连接,把后面的直接全部加在前面一个的下面。UNION是去掉重复的然后在排序放在一起。
2、UNION中不能使用order by语句。
分享到:
评论
2 楼 grayhound 2010-09-29  
跟你的思路差不多,但是你在做合并的时候,把表的相关数据都取出来了。
这样做挺影响性能的。其实最多合并前的子表,每次只取10条就足矣了。
1 楼 grayhound 2010-09-29  
select t.userid from
(select m1.userid,max(m1.sendtime) from Message m1,User u where m1.fromUserid  =u.userid and u.username='TestUser' and rownum<=10 group by m1.userid order by max(m1.sendtime) desc
union
select m2.userid,max(m2.sendtime) from Message m2,User u where m2.fromUserid  =u.userid and u.username='TestUser  and rownum<=10 group by m1.userid order by max(m2.sendtime) desc) t
where rownum<=10
group by t.userid order by max(t.sendtime) desc

相关推荐

    sql server笔试题

    自己整理的SQLserver笔试题。 当做知识点记了 内附答案

    网易程序笔试题

    【网易程序笔试题】是程序员在求职过程中可能会遇到的一个重要环节,主要测试候选人的编程能力、逻辑思维以及问题解决技巧。此类试题通常涵盖多种IT领域的知识点,包括但不限于数据结构、算法、操作系统、计算机网络...

    SQL笔试题(转载的)

    这篇文档《2011 SQL笔试题》及其压缩包资源,显然是为了帮助学习者或者应聘者准备SQL相关的面试或笔试而准备的。 SQL的基础知识点包括: 1. **数据类型**:SQL支持多种数据类型,如整数(INT)、浮点数(FLOAT)、...

    网易校招面试笔试题

    【标题】"网易校招面试笔试题"涵盖了网易公司在招聘过程中对候选人的技术与非技术能力的考察。作为中国互联网巨头之一,网易对于应聘者的选拔非常严谨,面试笔试环节是评估候选人是否具备所需技能和潜力的重要阶段。...

    SQL_Server 面试笔试试题及答案

    "SQL Server 面试笔试试题及答案" 本资源摘要提供了 SQL Server 面试笔试试题及答案,涵盖了数据库管理、数据模型、数据结构、数据库优化、SQL 语言等多方面的知识点。通过本资源,读者可以快速掌握 SQL Server 的...

    2013网易校招笔试题

    2013网易校园招聘笔试题,适用于c++开发,客户端开发,移动平台开发等

    网易笔试题

    描述"2010网易笔试题 2012网易笔试题等多套网易笔试题"进一步确认了这份资料的时间跨度,涵盖了2010年和2012年的网易笔试题目,暗示可能存在其他年份的题目,意味着这是一个比较全面的试题集合,对于了解网易笔试...

    2016校招网易游戏笔试题

    【标题】2016校招网易游戏笔试题解析 在2016年的校招过程中,网易游戏作为中国领先的游戏开发与发行公司,对应聘者进行了一系列的专业笔试考核。这次笔试不仅测试了应届毕业生的技术实力,也考察了他们的逻辑思维、...

    常见的SQL笔试选择题含答案.docx

    以下是一些关于SQL笔试选择题中的关键知识点: 1. **关系型数据库**:关系型数据库是一种以表格形式存储数据的数据库,其中数据之间的关系可以通过外键进行关联。题目中提到的Oracle和MySql都是典型的关系型数据库...

    SQL Server笔试题(Sql2000常见笔试题)

    【SQL Server 笔试题解析】 SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业级数据存储和管理。本题主要考察的是SQL Server 2000的基础知识,包括单词解释、SQL语句编写、填空和...

    网易有道笔试题第一部分偏产品策划知识.doc

    网易有道笔试题第一部分偏产品策划知识.doc

    经典的SQL笔试题题目

    经典sql练习,几道经典的SQL笔试题题目。sql就在于多多练习

    SQL笔试题库(有答案)

    SQL笔试题库。

    SQL 笔试题 数据库笔试题

    SQL 笔试题是数据库领域中的一个重要组成部分,涉及到数据库的各个方面,包括触发器、存储过程、索引、内存泄漏、事务、锁、视图、游标等知识点。 1. 触发器的作用:触发器是一种特殊的存储过程,通过事件来触发...

    sql 语句的笔试题

    SQL笔试题 本篇资源主要整理了多道SQL笔试题,涵盖了查询、删除、联合查询、分组等多个方面的知识点。 1. 查询出每门课都大于80分的学生姓名 知识点:子查询、distinct关键字 使用子查询可以实现该需求,子查询...

    大公司sql笔试题

    1到3年工作经验的 sql面试笔试题(通过面试360,华为,阿里收集)

    嵌入式软件笔试题合集.zip

    嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...

    C++面试题笔试题C++ 数据结构算法笔试题资料合集.zip

    C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....

Global site tag (gtag.js) - Google Analytics