SQL面试题:按日期统计胜负次数
需积分: 33 78 浏览量
更新于2024-10-01
1
收藏 50KB DOC 举报
在SQL语句面试题中,面试者经常被问及如何处理数据聚合和计数的问题。以下是一些常见的问题和解决方案:
1. 题目要求统计每个日期的胜场和负场次数,给出的比赛结果记录在`#tmp`表中,字段包括日期`rq`和比赛结果`shengfu`。题目要求的结果格式是日期和对应的胜败次数,例如'2005-05-09' 22(胜2次,负2次)和'2005-05-10' 12(胜1次,负2次)。这里提供了三种可能的SQL语句来实现这个目标:
- 第一种方法使用`CASE`语句和`SUM()`函数,计算每条记录的胜败值并按日期分组:
```
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;
```
这个查询会返回每条日期及其对应的胜败计数。
- 第二种方法利用子查询,通过`INNER JOIN`连接两个分别统计胜败次数的子查询:
```
SELECT N.rq, N.勝, M.負
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;
```
这里首先计算每个日期的胜败数量,然后通过日期匹配合并结果。
- 第三种方法使用两个独立的`SELECT`语句,分别对胜败情况进行计数,然后通过`WHERE`子句筛选出相同日期的记录:
```
SELECT a.rq, a.a1 as 胜, b.b1 as 负
FROM (
SELECT rq, COUNT(rq) as a1
FROM #tmp
WHERE shengfu = '胜'
GROUP BY rq
) a
JOIN (
SELECT rq, COUNT(rq) as b1
FROM #tmp
WHERE shengfu = '负'
GROUP BY rq
) b
ON a.rq = b.rq;
```
这里同样基于日期进行匹配,并计算各自的胜败计数。
2. 另一个问题涉及一张包含A、B、C三列的表,要求实现特定条件的查询,但题目没有给出具体条件。如果需要根据A列的某个值过滤数据,比如查找A列等于某个值的所有行,可以使用`WHERE`子句。假设我们想找出A列等于'def'的所有行:
```
SELECT *
FROM 表名
WHERE A = 'def';
```
如果需要统计符合条件的行数,可以替换`*`为`COUNT(*)`,例如:
```
SELECT COUNT(*)
FROM 表名
WHERE A = 'def';
```
以上两种情况都展示了在SQL查询中处理条件过滤和数据聚合的基本技巧。面试时,熟悉这些操作并且能够灵活运用是关键。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-11-23 上传
2008-12-24 上传
2023-05-17 上传
2023-05-15 上传
2024-07-24 上传
2022-11-11 上传
taoy_2008
- 粉丝: 4
- 资源: 19
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器