SQL面试题解析:Group by 实战练习
需积分: 10 9 浏览量
更新于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
最新资源
- Scan2PDF-开源
- kursovayaTRPS
- akshayg.in:个人博客网站
- javascript-w3resource:来自https的Javascript练习
- torch_sparse-0.6.12-cp38-cp38-linux_x86_64whl.zip
- 蓝桥杯代码(电子类单片机组).rar
- flink
- documents:与Kodkollektivet相关的文件
- DesignPatterns
- alisaTmFront
- ANNOgesic-0.7.26-py3-none-any.whl.zip
- wordsearch-node:使用 angular 和 node 构建的高度可扩展的单词搜索游戏
- 馆藏
- 华容道.zip易语言项目例子源码下载
- rapido-开源
- react-tic-tac-toe-tdd:用Jest TddReactTic Tac Toe游戏