602. 好友申请 II :谁有最多的好友(SQLSERVER)

题目描述:

RequestAccepted 表:

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| requester_id   | int     |
| accepter_id    | int     |
| accept_date    | date    |
+----------------+---------+
(requester_id, accepter_id) 是这张表的主键(具有唯一值的列的组合)。
这张表包含发送好友请求的人的 ID ,接收好友请求的人的 ID ,以及好友请求通过的日期。

编写解决方案,找出拥有最多的好友的人和他拥有的好友数目。

生成的测试用例保证拥有最多好友数目的只有 1 个人。

查询结果格式如下例所示。

示例 1:

输入:
RequestAccepted 表:
+--------------+-------------+-------------+
| requester_id | accepter_id | accept_date |
+--------------+-------------+-------------+
| 1            | 2           | 2016/06/03  |
| 1            | 3           | 2016/06/08  |
| 2            | 3           | 2016/06/08  |
| 3            | 4           | 2016/06/09  |
+--------------+-------------+-------------+
输出:
+----+-----+
| id | num |
+----+-----+
| 3  | 3   |
+----+-----+
解释:
编号为 3 的人是编号为 1 ,2 和 4 的人的好友,所以他总共有 3 个好友,比其他人都多。

 题解:

第一种:分两张表分别筛选出发送id和相应次数,接收id和相应次数。之后再全外连接可以保留所有带null的数据。之后选出最大的id和次数。 

/* Write your T-SQL query statement below */
select
--top 与 order by 选出最大次数的id,isnull判断前一个值是否为空,空就为第二个参数值。
    top 1 isnull(requester_id, accepter_id) id, isnull(num1, 0) + isnull(num2, 0) as num
from
--所用两张表逻辑相同,统计发送id和统计发送或接收次数,并单独成表。
    (select
        requester_id, count(requester_id) as num1
    from
        RequestAccepted
    group by
        requester_id) t1
full outer join
    (select
        accepter_id, count(accepter_id) as num2
    from
        RequestAccepted
    group by
        accepter_id) t2
on
--连接时也有null
    t1.requester_id = t2.accepter_id
order by
    num desc

 第二种:与第一种类似,但是通过union all进行分组。

select
--top和order by联用选出最大次数,统计次数相加使用sum
    top 1 id, sum(num) num
from
--与第一种方式类似的先选出发送和接收id和他们各自的次数,再使用union all相加表。
    (select
        requester_id id, count(requester_id) as num
    from
        RequestAccepted
    group by
        requester_id
    union all
    select
        accepter_id id, count(accepter_id) as num
    from
        RequestAccepted
    group by
        accepter_id) t
--对表进行分组通过id字段。
group by
    id
order by
    num desc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误信息是在使用Java的Servlet技术时遇到的一个常见问题,特别是当你尝试连接到Microsoft SQL Server数据库时。具体来说: `javax.servlet.ServletException: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver` - `javax.servlet.ServletException`:这是一个`ServletException`,表示在Servlet(Java中的服务器端组件)生命周期中发生了一个异常。Servlets通常用于处理HTTP请求和响应。 - `java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver`:这是Java中的`ClassNotFoundException`,表明JVM(Java虚拟机)无法找到你试图使用的`SQLServerDriver`类。`SQLServerDriver`是JDBC(Java Database Connectivity)驱动,用来与SQL Server数据库进行交互的Java接口。 这通常意味着你在项目的类路径(Classpath)中没有包含Microsoft SQL Server JDBC驱动的jar文件,或者jar文件的路径设置不正确。解决这个问题,你可以按照以下步骤操作: 1. **添加驱动jar**:确保你已经将`sqljdbc4.jar`(或更高版本)添加到你的项目类路径中。这通常是通过添加到`WEB-INF/lib`目录下,或者如果你使用Maven或Gradle,将其添加到构建工具的依赖管理中。 2. **检查导入语句**:确认在你的代码中正确导入了SQL Server的JDBC包,例如:`import com.microsoft.sqlserver.jdbc.SQLServerDriver;` 3. **配置URL**:在连接数据库时,确保使用正确的URL,格式类似`jdbc:sqlserver://your-server:port;databaseName=yourDatabase`。 4. **重启应用服务器**:有时候仅仅重新部署应用可能不足以刷新类加载,可能需要重启服务器。 5. **检查环境变量**:如果是运行在服务器上,确保JAVA\_HOME和PATH环境变量包含了正确的Java和JDBC驱动的位置。 如果你还有其他问题,比如不清楚如何添加jar到项目,或者不清楚如何配置数据库连接,我可以帮你进一步了解这些概念。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值