SQL Server面试题实战:分组计胜负次数
需积分: 13 49 浏览量
更新于2024-11-07
收藏 33KB DOC 举报
在SQL Server的经典面试题中,有一道关于GROUP BY操作的问题,考察的是如何根据特定条件对数据进行计数和分组。面试者可能希望测试求职者的SQL查询能力和对聚合函数的理解。
题目背景是有一个名为`#tmp`的临时表,其中包含比赛日期`rq`和比赛结果`shengfun`,结果包括胜('胜')和负('负')。表中有重复的比赛日期,每个日期都有胜负记录。面试者要求编写SQL语句来统计每个比赛日期的胜场和负场次数,并按照日期`rq`进行汇总。
1. 第一种方法是使用CASE WHEN语句,结合SUM函数,分别计算胜场和负场的总和:
```sql
SELECT
rq,
SUM(CASE WHEN shengfu = '胜' THEN 1 ELSE 0 END) AS 胜,
SUM(CASE WHEN shengfu = '负' THEN 1 ELSE 0 END) AS 负
FROM
#tmp
GROUP BY
rq;
```
这个查询会为每个日期计算出胜场和负场的次数,并将结果按日期分组。
2. 第二种方法是通过子查询和INNER JOIN来实现:
```sql
SELECT
N.rq AS rq,
COUNT(*) AS 勝,
M.COUNT(*) AS 负
FROM
(SELECT rq, COUNT(*) AS 胜 FROM #tmp WHERE shengfu = '胜' GROUP BY rq) N
INNER JOIN
(SELECT rq, COUNT(*) AS 负 FROM #tmp WHERE shengfu = '负' GROUP BY rq) M
ON
N.rq = M.rq
GROUP BY
N.rq;
```
这里首先分别计算每个日期的胜场和负场次数,然后将这两个子查询通过比赛日期关联起来。
3. 最后一种方法涉及两个表`temp1`,但题目给出的信息不完整,无法直接应用在这个场景。如果`temp1`表与`#tmp`表有某种关系(比如`col002`对应`shengfu`),则可能需要基于这个关系进行查询。假设`temp1`表也包含了比赛结果,可以这样写:
```sql
SELECT
t1.col001 AS col001,
COUNT(CASE WHEN t1.col002 = '胜' THEN t1.col001 END) AS a1胜,
COUNT(CASE WHEN t1.col002 = '负' THEN t1.col001 END) AS b1负
FROM
temp1 t1
GROUP BY
t1.col001;
```
这个查询是针对`temp1`表的,可能不符合原题目的需求,但如果这是一个额外的提示,可能表示面试者期望求职者展示如何在更复杂的数据结构中进行分组和计数。
这个问题旨在测试求职者如何有效地利用GROUP BY、JOIN、CASE WHEN和COUNT等SQL核心功能,同时理解如何根据具体业务逻辑来构建查询。对于实际面试,理解和灵活运用这些技术至关重要。
2017-12-24 上传
2013-10-16 上传
2011-02-26 上传
102 浏览量
2011-05-10 上传
2022-01-13 上传
2023-08-04 上传
OxinOxinO
- 粉丝: 0
- 资源: 5
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析