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

1.sql中,如何求字段整体的标准差和均值?

均值使用聚合函数avg计算:

select avg(column) as mean from your_table;

标准差用聚合函数stdev计算:

select stdev(column) as std from your_table;

有些数据库中的标准差函数是stddev,注意区别。

2.sql中,什么是笛卡尔积?笛卡尔积一般出现在什么场景下?

笛卡尔积是指在两个或多个表之间进行连接操作时,将一个表的每一行与另一个表的每一行进行组合,生成一个包含所有可能组合的结果集。这种操作会导致结果集的行数成倍增加,可能会引发性能问题,因此需要谨慎使用。

笛卡尔积一般出现在以下场景中:

①未指定连接条件的情况:如果在进行表连接时没有明确指定连接条件,某些数据库系统可能会默认为进行笛卡尔积。

②交叉连接:有时候可能需要获得所有可能的组合,例如在某些报表或数据分析中。这种情况下可以明确使用'cross join'来获得笛卡尔积。

select * from table1cross join table2;
# 或者
select *from table1, table2;

3.sql中,rank, dense_mark, row_number的区别是什么?

在sql查询中,rank, dense_mark, row_number都是窗口函数,用于在结果集的窗口上进行排序和分配排名。它们在赋予排名时有一些不同之处:

①rank函数赋予相同值的行相同的排名,但会跳过后续排名。

②dense_mark函数赋予相同值的行相同的排名,但不会跳过后续排名。

③row_number函数无论值相同,都会为每一行分配一个唯一的连续整数排名。

4.在sql中,除了rank以外还有哪些窗口函数?

除了rank,sql还提供了许多其他窗口函数,用于在指定的范围内进行计算、排序和分析。以下是一些常见的窗口函数。

①dense_mark:分配连续的、不重复的排名给结果集中的行,相同的值会获得相同的排名,而且不会跳过排名。

②row_number:为结果集中的每一行分配唯一的、连续的整数排名,不考虑相同值的行。

③ntile(n):将结果集分成n个大小相等的部分,并为每个部分的行分配一个整数值表示部分号(1到n)。

④lead(column , offset):返回当前行之后的某一行中的列值。

⑤lag(column,offset):返回当前行之前的某一行中的列值。

⑥first_value:获取分组集合中第一行的某个列值。

⑦last_value:获取分组集合中最后一行的某个列值。

⑧sum/avg/min/max(column) over(partition by ... order by ...):计算指定窗口中某列的总和/平均值/最小/最大值。

5.简述max()聚合函数和窗口函数max(A) over(partition by B)的区别。

①max聚合函数:用于在查询中对某个列的值进行聚合计算,得出整个结果集的最大值。

②max窗口函数:在查询结果集的某个窗口(或分区)上进行计算的函数。窗口函数可以同时获得每个分区的最大值。

6.窗口函数和where的执行顺序孰先孰后?

在sql中,where子句通常会在窗口函数之前执行。

首先,数据库会根据where子句的条件对表进行筛选,过滤出符合条件的行。然后,在已经筛选出的结果集上,窗口函数开始计算。

这个执行顺序确保了窗口函数在筛选和过滤数据后进行计算,以及在计算窗口函数不会考虑不满足where子句条件的行。

7.sql中正则化函数一般如何使用?

在sql中,正则表达式函数(正则化函数)允许在文本数据中进行模式匹配、查找和替换。不同的数据库系统可能提供不同的正则化函数,但一般来说,它们都遵循类似的语法和用法。以下是一些常见的SQL正则表达式和使用方法:

①regexp 或 rlike:这些函数用于在文本列中进行正则表达式的匹配操作。它们一般用于select语句的where子句中。

select column from your_tablewhere column regexp 'pattern';

②regexp_replace:用于在文本列中使用正则表达式进行替换操作:

select regexp_replace(column,'pattern','replacement') from your_table;

③regexp_substr:用于从文本列中提取匹配正则表达式的子字符串:

select regexp_substr(column,'pattern') from your_table;

④locate:用于匹配子串在文本中出现的位置:

select column,locate('pattern',column) from your_table;

8.sql中如何将int类型的字段转换为string类型?

以下是常见示例:

# mysql
select cast(int_column as char) as string_column from your_table;
# 或者
select convert(int_column,char) as string_column from your_table;
# sql server:
select cast(int_column as varchar) as string_column from your_table;
# 或者
select convert(varchar,int_column) as string_column from your_table;

9.sql中,left join , right join , inner join 有什么差别?

left join , right join 和 inner join 都是用于在sql查询中进行表连接操作的关键字,它们之间的差别如下:

①inner join返回两个表中的匹配行,如果某行一个表中找不到匹配的行,那么这个行不会在结果中显示。

②left join返回左表中的所有行以及右表中与坐标匹配的行。如果在右表中找不到匹配的行,那么对应的右表列将会显示为NULL。

③right join返回右表的所有行,以及左表中与右表匹配的行。如果在左表中找不到匹配的行,那么对应的左表列将会显示为NULL。

join操作的效率通常比单纯使用子查询的效率要高,但应尽量避免多重嵌套join或join多张表,以免影响查询性能。

10.sql如何将类型为float的字段保留两位小数?

可使用格式化函数来将float类型的字段保留指定的小数位数。以下是一些通用的方法:

# mysql 使用format函数
select format(float_column,2) as formatted_float from your_table;
# sql server
select round(float_column,2) as formatted_float from your_table;
全部评论

相关推荐

10-08 16:13
已编辑
南京航空航天大学 C++
中安智能 软开 1.85*14 硕士211
点赞 评论 收藏
分享
9 57 评论
分享
牛客网
牛客企业服务