"该资源是关于腾讯公司面试中涉及的SQL题目,主要涵盖带条件的聚合统计和查询多条记录的ID号等知识点。"
在SQL领域,掌握高效的查询技巧对于数据分析和数据库管理至关重要,尤其是在大型企业如腾讯这样的场景中。本资料详细介绍了两个具体的SQL问题及其解决方案。
首先,我们来看第一个问题:带条件的聚合统计。在这个例子中,我们需要统计每天胜利('胜')和失败('负')的比赛次数。有两种实现方式,一种是分解式,另一种是合并式。
1.1.3 分解式实现:
创建了临时表`t1`,通过`IF`函数将胜和负分别赋值为1和NULL,然后在`GROUP BY`子句中按日期分组,使用`COUNT()`函数计算每个类别(胜或负)的数量。这种方法将条件判断和计数分开,使得代码更清晰易读。
```sql
WITH t1 AS (
SELECT dt, shengfu,
IF(shengfu='胜', 1, NULL) AS sheng,
IF(shengfu='负', 1, NULL) AS fu
FROM db_1.tb_1
)
SELECT dt, COUNT(sheng) AS sheng_cnt, COUNT(fu) AS fu_cnt
FROM t1
GROUP BY dt;
```
1.1.4 合并式实现:
在单个`SELECT`语句中,使用`IF`函数和`COUNT()`结合,直接在`GROUP BY`子句中完成条件判断和计数。这种方式虽然代码更紧凑,但可能在理解上稍微复杂一些。
```sql
SELECT dt, COUNT(IF(shengfu='胜', 1, NULL)) AS sheng_cnt, COUNT(IF(shengfu='负', 1, NULL)) AS fu_cnt
FROM db_1.tb_1
GROUP BY dt;
```
接下来,我们转向第二个问题:查询有两条以上记录的ID号。
1.2.1 目标:
在表`tb_2`中找出至少有两条记录的ID。
1.2.2 解决方案:
这里给出了至少两种方法来实现这个目标:
方法一:使用`GROUP BY`和`HAVING`子句
```sql
SELECT id
FROM db_1.tb_2
GROUP BY id
HAVING COUNT(*) >= 2;
```
方法二:利用子查询和`IN`操作符
```sql
SELECT DISTINCT id
FROM db_1.tb_2
WHERE id IN (
SELECT id
FROM db_1.tb_2
GROUP BY id
HAVING COUNT(*) >= 2
);
```
这两种方法都能有效找出具有多条记录的ID,但第一种方法通常更高效,因为它避免了额外的`DISTINCT`操作。
总结,本资源提供了在实际工作和面试中可能遇到的SQL问题实例,展示了如何使用SQL进行条件聚合统计和查询重复数据,这对于提升SQL技能和应对大厂面试非常有帮助。学习和熟练掌握这些技巧,能帮助你在处理大数据时更加得心应手。