数据分析基础问题总结——SQL(1)

1.sql如何解决数据倾斜问题?

在SQL数据库中,数据倾斜问题通常是指在查询操作中某些数据分布不均衡,导致一些查询或操作的性能下降。以下是一些解决SQL数据库中数据倾斜问题的常见方法:

①索引优化:确保表中经常被查询的列上有合适的索引,这可以加速查询操作并减轻数据倾斜的影响。

②分区表:如果数据库支持分区表,可以将表数据按照某个列的值(比如时间戳)进行分区,使得数据在物理存储上更均匀分布。

③优化查询语句:避免使用过于复杂的连接操作或聚合操作,以减少数据倾斜的可能性,尽量避免全表扫描,以提高查询效率。

④使用临时表:对于某些复杂查询,可以将查询结果存储在临时表中,然后再进行进一步的操作,这有助于平衡计算负载并减少数据倾斜的影响。

⑤使用样本查询:在某些情况下,可以使用随机样本查询来获取近似的查询结果,以减轻数据倾斜带来的影响。

⑥数据缓存:使用数据库的查询缓存功能,将经常被查询的数据缓存起来,以减少对倾斜数据的重复查询。

2.SQL中,where 和 having 的区别有哪些?

在SQL中,where 和 having 是两个用于筛选数据的关键字,但它们的适用场景和功能略有不同。其主要区别如下:

①应用对象不同:where 用于在执行查询(即数据被检索出来)之前对数据进行过滤,作用于表的行级别;而 having 用于在执行聚合函数(即sum(),count(),avg()等)后过滤结果,作用于查询的结果集。

②聚合函数:不能直接在 where 子句中使用聚合函数,可以在 having 子句中使用聚合函数。

③查询语句:where 用于普通的 select 查询,而having只能用于group by查询。

3.SQL中,union 和 join 的区别有哪些?

union 和 join 是在SQL查询中用于不同目的的两个不同的操作。

①union:用于将两个或多个具有相同列结构的结果集合并成一个单一的结果集。结果集中不会有重复的行,即使在不同的输入结果集中有相同的行也会被合并成一个。举例:

SELECT COLUMN1,COLUMN2 FROM TABLEAUNIONSELECT COLUMN1,COLUMN2 FROM TABLEB

②join:用于在多个表之间基于某些列的关联将数据组合在一起。通过指定连接条件,可以从多个表中选择相关的数据行,将它们组合成一个更大的结果集。根据连接条件,有不同类型的 join ,包括 inner join , left join , right join , full outer join 等等。距离:

SELECT COLUMN1,COLUMN2 FROM TABLEAINNER JOIN TABLEB ON TABLEA.COLUMN = TABLEB.COLUMN

其主要区别在于:union 用于合并多个结果集,确保结果集中没有重复行。join 用于将多个表中的数据联合在一起,根据指定的连接条件筛选关联的数据行。

4.SQL语句的执行顺序是怎样的?

SQL查询的执行顺序通常可以按以下步骤理解:

①FROM子句:从指定的表中获取数据。

②JOIN子句:如果在查询中使用了JOIN操作,根据连接条件将不同的表组合在一起。

③WHERE子句:过滤符合条件的行。

④GROUP BY 子句:如果使用了GROUP BY,那么根据指定的列对结果进行分组。

⑤HAVING子句:过滤符合条件的分组。

⑥SELECT子句:选择要返回的列,可以进行聚合操作(如SUM,COUNT等)。

⑦DISTINCT关键字:移除结果集中的重复行。

⑧ORDER BY子句:对结果集按照指定列进行排序。

⑨LIMIT/OFFSET子句:只返回指定数量的行。

5.SQL如何实现去重操作?

SQL去重方法如下:

①DISTICT关键字:在SELECT语句中使用,可以删除所有重复行,只保留不同值。

②GROUP BY子句:通常与聚合函数一起使用,它将查询结果按指定列分组,并对每个分组进行聚合计算。如果只需要列出不同的值,可用GROUP BY子句并省略聚合函数,这样会自动去重。

③使用子查询:在SELECT语句中嵌套一个子查询,可以选择唯一的值。

④UNION操作符:合并两个或多个查询的结果集,并自动去除重复行。

以上去重方法都可能会影响查询性能,需要谨慎使用。

6.SQL中,count(*) , count(字段) , count(distinct 字段)的区别是什么?

在SQL中,count 函数用于计算满足指定条件的行数。可以以不同的方式使用,具体区别如下:

①count(*)计算所有行的数量,无论列中的值是什么。

②count(字段)计算指定列非空值的数量,不包括NULL值。

③count(dinstinct 字段)计算指定列中不同非空值的数量,排除重复的值。

7.SQL中如何将'yyyy-MM-dd'的日期格式转换为'yyyyMMdd'形式?

在SQL中,可以用CAST或CONVERT函数将日期格式做转换。

举个在具体数据库中使用的示例:

# MySQL:
select cast(date_column as char(8)) from your_table;
# Oracle:
select to_char(date_column,'yyyyMMdd') from your_table;
# SQL Server:
select convert(varchar(8),date_column,112) from your_table;
# PostgreSQL:
select to_char(date_column,'yyyyMMdd') from your_table;

8.sql中如何求出两个'yyyyMMdd'格式的日期差多少天?

在SQL中,可以使用DATEDIFF函数计算两个日期之间的天数差异。举例:

select datediff(day,convert(date,'20220824',112),convert(date,'20230824',112)) from your_table;

9.sql中如何将时间戳转换为'yyyy-MM-dd'日期格式?

这个操作通常涉及到使用日期函数来格式化时间戳。以下是常见的示例:

# MySQL:
select date_format(timestamp_column,'%Y-%m-%d') from your_table

10.sql中,if 和 case when 的区别是什么?

if 和 case when 都是在SQL查询中用于条件判断和分支逻辑的语句,但它们在语法和用法上有一些区别。

①语法不同:

if语句是基于函数的条件判断语句。语法如下:

if(condition,vaule_if_true,value_if_false)

case when是基于表达式的条件判断语句。语法如下:

case when condition1 then result1 when condition2 then result2 ... else result end

②if语句只能根据条件返回单个值,不能用于控制程序流程;而case when可以根据多个条件执行不同的代码块,可用于控制程序流程。

③case when支持嵌套使用,可以实现更复杂的条件判断逻辑;而if函数只能处理简单的条件判断。

全部评论
实习会问得深嘛
点赞 回复 分享
发布于 2023-09-03 01:36 广东

相关推荐

2025-12-27 16:21
已编辑
门头沟学院 Java
bg:中下211本科,java后端,无竞赛,无基础,大一升大二暑假开始学java。五段实习:美团-小红书-腾讯-淘天-字节。面秋招的简历只有美团、小红书、淘天。刚刚发现我的秋招蚂蚁流程挂了,这是我最后一个流程,那么我的秋招就算彻底结束了,总结一下:字节ssp+,职级2-1。美团ssp,+2打了半小时微信电话极力挽留。快手ssp,但报了字节薪资后没有争取的想法了。小红书sp,今年小红书给的很高,但比字节2-1还是差很多。虾皮应该是小sp?对虾皮一点意向都没,纯拿来集邮了。淘天ssp(暑期转正),说不要我的三方,毕业前考虑好了随时可以不签三方选择淘天。挂了的流程:京东二面挂,估计学历被卡了。懂车帝一面挂,和面试官聊不来,不认同我的方案。拼多多hr面挂,问我低于预期还来不来,当时说不考虑了,估计觉得我不忠诚。蚂蚁hr面挂,聊的还行,但估计我不会去给我挂了吧。阿里控股一面挂,没面前就知道是kpi了,因为时间可选的很多,而且都是半小时,我也拿他刷我的kpi了。上面差不多是我的情况,下面是我想说的话。我觉得我不算特别突出优秀的那类人,但我多少也算是靠前的那一批人,即使这样,秋招也不算特别顺利,也有挂了的流程,但你能说是我的问题吗,我觉得大部分情况不是的,如果真的是我的问题,我不可能本科校招拿到2-1,所以很多面试挂了,问题不出在面试者身上,很多是看运气+眼缘+和面试官合不合得来。所以我觉得,学会察言观色,了解面试官的脾性,也是面试很重要的一个点。比如面试官是喜欢听长回答,还是听短回答,他更看重哪些点,每个面试官对这些的侧重都是不一样的,所以作为面试者,要学会察言观色,通过面试官开局的一两个问题以及你回答后他的表现,就要判断出来。像我现在其实面试开局个五分钟,我就基本能判断个七七八八了,然后我后面的回答就会有所变化。这是我想说的第一个点:不要为面试结果焦虑,有时候问题不出在你身上,但你可以学一些面试技巧,尽量提高你的面试通过率,这里说的面试技巧指的不是网上那种烂大街的,一两分钟短视频说什么提高你面试通过率的,而是你要在你自己的面试过程中不断总结经验,吸取教训,旁人教你的终究是有限的。另外想说下选offer的事,上面其实可以看出来,我秋招最后是选了字节的,还没签三方我就来提前实习感受业务了,当我签完三方又过了一个多月,我这些天又在想这个问题,字节真的是我想要的吗,我现在总结了一下字节的好坏,发现当时可能被字节的高薪资影响判断了,如果现在再选一次的话,我应该会选杭州的小红书,会生活的更舒服点。具体种种就不展开说了。然后虽然我现在也可以说去把小红书舔回来,去毁字节,但我觉得没必要这么做,我可以采用其他的措施去不就,比如规划好两年内就跳槽,跳到杭州,跳到更舒适的城市。我觉得大家选offer的时候,真的可以冷静下来多方面考虑,薪资、城市、组内氛围、业务、老板是否看重、组内情况、未来升职机会等等都是可以考虑的因素,虽然有的时候不管选哪个,都不会坏,但最好也别让自己后悔吧,即使真后悔了,我觉得也没必要过度美化没走过的路,想好补救措施即可。这是我想说的第二个点:冷静好好做选择,不管是offer还是其他。但人生容错率很大,即使选错了,也一定有补救措施。最后还想说一些成长上的东西,尤其是现在AI火热的时代。我觉得大家如果想提高自己,或者说在未来社招跳槽有竞争力,肯定是要学AI相关的东西的,不说要会多懂AI,至少也要了解基本概念,而且一定要学会用AI提效。我现在字节的mt和我说,他现在80%代码都是AI写的。而我最近也开始尝试用AI工具,感觉现在AI真的进步很多,挺聪明的了,我现在写需求基本都是先让AI写,我再人工review小改动一下就差不多了。我觉得「AI取代程序员」是个很远的话题,但是「AI取代不会用AI的程序员」,可能真的就是近两年的事了。而怎么去学习这块的内容,其实我也正在探索,我也是刚学AI的起步阶段,我觉得大家也要有自己的信息检索能力,而不是别人喂你什么,你才学什么,自己一个人就不会学了。这是我想说的第三个点:趁年轻,多学习提升自己,拥抱AI,不要原地踏步,原地踏步的程序员最容易被淘汰。大概就是这样吧,今天看蚂蚁流程发现挂了,前几天腾讯约面我也拒了,就想到自己的秋招/校招算彻底结束了,有感而发,随便聊了下。牛客以后应该不会更新,大家不用关注,熟悉我的朋友应该知道我在其他平台有号。我更喜欢以长视频的形式去做分享,感觉会更有体系,而不是网上那种一两分钟的零碎短视频的那种营销号去起号,我也推荐大家多去看高质量的长文章、长视频,我觉得收获的能更多。希望大家能收获满意的offer与未来。
CEXBB:刷到最后才发现原来是优雅✌🏻,我的Java引路人
2025年终总结
点赞 评论 收藏
分享
评论
5
82
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务