SQL面试题解析:Group by 实战练习
需积分: 10 110 浏览量
更新于2024-11-14
收藏 35KB DOC 举报
"这篇资料提供了一些SQL面试题和练习,主要关注如何使用SQL进行数据查询和聚合操作。其中举了一个具体的问题,要求根据日期(rq)统计每天的胜利(胜)和失败(负)次数。"
在SQL面试中,理解和熟练运用GROUP BY语句以及相关的聚合函数是至关重要的。这道题目就很好地展示了这些概念。以下是针对这个问题的三种不同解决方案:
1) 第一种方法使用了CASE WHEN语句和GROUP BY结合。CASE WHEN语句允许我们在SQL中根据条件返回不同的值。在这个例子中,我们对'shengfu'字段进行判断,当它等于'胜'时,我们计数为1,否则为0。然后通过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) 第二种方法使用了子查询和JOIN。首先,我们为胜利和失败分别创建两个子查询,计算每个日期的胜场和负场数量,然后通过INNER JOIN将它们连接在一起,基于相同的日期(rq)。
```sql
SELECT N.rq, N.勝, M.負
FROM (
SELECT rq, 勝 = COUNT(*)
FROM #tmp
WHERE shengfu = '胜'
GROUP BY rq
) N
INNER JOIN (
SELECT rq, 負 = COUNT(*)
FROM #tmp
WHERE shengfu = '负'
GROUP BY rq
) M
ON N.rq = M.rq
```
3) 第三种方法与第二种类似,但使用了别名(a 和 b)来表示胜利和失败的子查询,并且它们都是从临时表temp1中获取数据,这可能意味着原始数据是在一个不同的表中。这个方法同样使用了COUNT()函数和GROUP BY。
```sql
SELECT a.col001, a.a1胜, b.b1负
FROM (
SELECT col001, COUNT(col001) a1
FROM temp1
WHERE col002 = '胜'
GROUP BY col001
) a,
(
SELECT col001, COUNT(col001) b1
FROM temp1
WHERE col002 = '负'
GROUP BY col001
) b
WHERE a.col001 = b.col001
```
以上三种方法都能得到相同的结果,即按日期统计胜利和失败的次数。在实际面试中,选择哪种方式取决于个人对SQL的理解、习惯以及对特定数据库系统的熟悉程度。理解并能灵活运用这些方法对于提升SQL查询能力至关重要。
2010-07-21 上传
2010-11-28 上传
2016-07-18 上传
2012-12-10 上传
2011-06-25 上传
muziyutian6840532
- 粉丝: 1
- 资源: 2
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建