概述
谷歌在数据分析面试中经常会考察求职者处理 SQL 问题的能力。
虽然咱们不必定会去谷歌面试,但认识全世界顶级大厂的面试,亦会对你的面试有不少帮忙,接下来,咱们一块认识一下谷歌是怎样面试数据分析师的吧。
首要,你需要准备好回答有些基本的 SQL问题,如,“什么是 SQL?” “什么是连接?” “什么是主键?”“什么是外键?”等问题,这些基本的 SQL 问题是在测试你对 SQL 的认识程度。
一般面试官会在面试的初级周期询问这些问题,倘若你还不晓得该怎么回答这些问题,能够先看一下《80 个平常的 SQL 面试问题与答案》与《30道SQL面试题助你求职》这两篇文案。
在谷歌的 SQL 面试中一般会问到更加多与业务关联的 SQL 问题,例如,围绕客户数据编写各式各样的 SQL 查找。
谷歌面试流程
谷歌面试流程中的每一个周期都很重要。但在技术筛选和现场面试之前通常不会触及 SQL 问题。详细流程如下。
初步tel筛选 - 一般会问有些工作背景与工作经验关联的问题。通常由 HR 的人进行初筛,衡量你是不是适合谷歌。
技术筛选 - 在技术筛选中,一般会问有些基本的 SQL 问题,包含有些基本的操作,如 DATE、GROUP BY 和 JOIN。可能还会需求你执行有些基本的 SQL 查找。
现场面试 - 最后一轮面试包含运用 CASE、JOIN、子查找和繁杂查找的中高级 SQL 问题。
谷歌 SQL 面试会问些什么?
和其他互联网超级大厂同样,谷歌对数据分析非常注重。
谷歌的 SQL 面试不仅会问哪些平常的基本问题。还会经过案例考察你对 SQL 的实战能力。
谷歌会运用真实数据考察你处理各样实质业务问题的能力,并需求你为业务数据集编写查找。平常的问题如下。
基本 SQL 面试问题- 在技术筛选周期,谷歌会考察求职者各样 SQL 概念的定义问题。重视,求职者要具备运用浅显易懂的语言解释 SQL 基本概念和定义的能力。
SQL 查找问题 - 测试求职者编写 SQL 查找语句的能力。谷歌会供给给求职者一个业务数据集,并需求编写各样 SQL 查找。
高级 SQL 问题 - 求职者需要按照详细案例问题编写高级 SQL 查找。
谷歌会考察那些岗位 SQL 问题?
谷歌中有非常多岗位都会运用 SQL,但重点在以下岗位的面试中会考察 SQL。
商场分析师
谷歌的商场分析师会运用 SQL 生成与守护业务报告。
在商场分析师面试中,谷歌会考察 SQL 的基本问题,如 DATE、GROUP BY 和 JOIN,在最后一轮面试中,会考察繁杂的 SQL 查找。
BI 工程师
谷歌的 BI 工程师处在制品、数据和业务战略的交汇处。求职者需要利用数据制定业务决策,以改善客户体验。SQL 是谷歌在面试 BI 工程师时测试的重要技能之一。
数据分析师
谷歌的数据分析师要从数据中获取商场洞察,并向关联人员供给这些信息。然则在谷歌中,区别团队中的数据分析师的职责会因团队而异。例如,谷歌宣传团队的数据分析师与云盘团队的职责会有很大区别。
数据专家
谷歌会考察数据专家的各样区别方面的技能。虽然面试的重点在统计、算法和设备学习等方向。但仍要做好谷歌考察你 SQL 查找能力的准备。
26 个谷歌 SQL 面试问题与答案
1、谷歌搜索频率的中位数
谷歌的营销团队正在制作一则超级碗杯的宣传,需要在宣传上表示一个简单的统计数据:去年个人搜索次数的中位数。
然而,在谷歌的搜索规模太庞大了,查找 2 万亿次搜索的代价太高。不外,谷歌供给了搜索摘要表,包括了去年有多少谷歌用户进行了搜索以及搜索的次数。
编写 SQL 查找计算用户进行搜索的中位数,将中位数四舍五入到小数点后一位。
`search_frequency` 表
`search_frequency` 示例表
输出结果示例
答案 1
WITH searches_expanded AS ( 2 SELECT
searches 3 FROM
search_frequency 4 GROUP BY 5
searches, 6 GENERATE_SERIES(1
, num_users)) 7 8SELECT 9 ROUND(PERCENTILE_CONT(0.50) WITHIN GROUP
( 10 ORDER BY searches)::DECIMAL, 1) AS median11FROM
searches_expanded;
2、奇数和偶数测绘值
假设有一张包括从谷歌传感器多天内多次测绘的测绘值的表。
编写一个 SQL 查找,分别计算某天奇数编号和偶数编号测绘值的总和,并将结果表示在两列中。
`measurements` 示例表
输出结果示例
示例解释
基于输出的结果。
在 2024 年 7 月 10 日,奇数编号测绘值的和为 2355.75,偶数编号测绘值的和为 1662.74。
在 2024 年 7 月 11 日仅有两个测绘值。奇数编号测绘值的和为 1124.50,偶数编号测绘值的和为 1234.14。
答案 1
WITH ranked_measurements AS ( 2 SELECT 3 CAST(measurement_time AS DATE) AS
measurement_day, 4
measurement_value, 5 ROW_NUMBER() OVER
( 6 PARTITION BY CAST(measurement_time AS DATE
) 7 ORDER BY measurement_time) AS
measurement_num 8 FROM
measurements 9
) 1011SELECT12
measurement_day, 13 SUM(measurement_value) FILTER (WHERE measurement_num % 2 != 0) AS
odd_sum, 14 SUM(measurement_value) FILTER (WHERE measurement_num % 2 = 0) AS
even_sum 15FROM
ranked_measurements 16GROUP BY
measurement_day;
3、谷歌地图标记的用户生成内容
假设你是谷歌地图团队的数据分析师,此刻需要你调研用户上传到谷歌地图的照片和评论。
编写 SQL 查找,查询被标记为 “off-topic” 最多的是哪种场所(place_category)。按 place_category 的升序表示查找结果。
`place_info` 示例表
`maps_ugc_review` 示例表
输出结果
共有 2 家餐厅(Baar Baar 和 Rubirosa)被标记为 “off-topic” 。酒吧仅有 1 家。因此呢,输出的结果是 “Restaurant”。
答案 1
WITH reviews 2
AS ( 3 SELECT 4
place.place_category, 5 COUNT(ugc.content_id) AS
content_count 6FROM
place_info place 7JOIN
maps_ugc_review ugc 8 ON
place.place_id = ugc.place_id 9WHERE content_tag = Off-topic10GROUP BY
place_category 11
) 12SELECT13
place_category, 14
content_count, 15 RANK() OVER (ORDER BY
content_count MYSTERY_KEYWORD) 16 AS
top_place 17FROM
reviews;
4、确定最受欢迎的谷歌搜索类别
假设谷歌要分析顶级搜索类别,以优化搜索结果。此刻有 searches 和 categories 两张表。
其中,searches 包括搜索的信息,categories 表中的每一个类别 ID 都对应类别名叫作。
`searches` 示例表
`categories` 示例表
编写 SQL 查找,给出 2024 年每月各类中的搜索总数。
输出结果示例
答案
举荐运用 SQL 窗口函数处理此问题。 1SELECT 2
categories.category_name, 3 EXTRACT(MONTH FROMsearches.search_date)AS month
, 4 COUNT(*) OVER (PARTITION BY categories.category_name, EXTRACT(MONTH FROM searches.search_date)) AS
total_searches 5FROM 6
searches 7LEFT JOIN 8categoriesON
categories.category_id = searches.category_id 9WHERE10 EXTRACT(YEAR FROM searches.search_date) = 202411ORDER BY12 total_searches DESC
这个查找首要连接 searches 和 categories 表,而后按 category_name 和 search_date 的月份对结果进行分区。COUNT(*) OVER() 子句计算各分区中的搜索数量。WHERE 子句保证数据是 2024 年的。
最后,按 total_searches 降序排序,将每月搜索最多的类别排在最前面。
5、什么是数据库反范式?
反范式是修改数据库 schema 的方式,这种方式偏离了典型的范式规则(1NF、2NF、3NF 等)。
反范式一般用于加强数据库的性能,尤其是当数据库用于报告和分析的目的,而不是用于在线事务处理 (OLTP) 时。
经过数据复制,反范式能够减少检索数据所需巨大的连接数量,从而加强查找性能。
然而,反范式亦会引起有些问题,例如,更加多的冗余数据,以及更繁杂的更新和删除操作。
6、筛选谷歌宣传
做为谷歌的数据分析师,要分析谷歌宣传数据以进行宣传投放和客户定位。需要从数据库中查找所有符合以下要求的宣传记录。
宣传的状态(“status”)为 “active”。
“impressions” 大于 500,000。
宣传的最后更新时间(“last_updated”)为 2024 年。
编写 SQL 查找,根据以上要求筛选 ads 记录。
`ads` 示例表
答案1SELECT
* 2FROM
ads 3WHERE status = active4AND impressions > 5000005AND YEAR(last_updated) = 2024
;
首要,查找 status 值为 “active” 的记录;
而后,进一步过滤结果,只表示 “impressions” 超过 500,000 的记录;
最后,按年份(2024)进行过滤。
7、存储过程的功效是什么?
存储过程类似于编程中的函数,用于封装业务规律,并组织成一个代码单元。
存储过程能够接受多个输入参数,并返回多个输出值。
例如,做为处理 HR 分析项目的谷歌数据分析师,你需要创建一个存储过程以计算某分部的平均工资。 1CREATE FUNCTION get_avg_salary(department_name TEXT
) 2RETURNS NUMERIC AS3$BODY
$ 4BEGIN5 RETURN (SELECT AVG(salary) FROM google_employees WHERE
department = department_name); 6END
; 7
$BODY$ 8
LANGUAGE plpgsql;
以下 SQL 查找调用这个存储过程,并查询数据分析分部的平均工资。 1SELECT get_avg_salary(Data Analytics
);
8、`EXCEPT` / `MINUS` 操作符的功效是什么,举例说明?
MINUS / EXCEPT 操作符用于返回第1个 SELECT 语句中未被第二个 SELECT 语句返回的所有行。
重视,EXCEPT 是在 PostgreSQL 和 SQL Server 中运用的,MINUS 是在 MySQL 和 Oracle 中运用的。
9、评定谷歌宣传的点击率和转化率
做为谷歌购物的数据分析师,你需要监控各样谷歌购物宣传的点击率(CTR,click-through rate)和转化率(每次点击实现让用户将商品添加到购物车中的比例)。
给定两个数据表 ad_clicks 和 cart_addition,编写 SQL 查找评定每一个宣传的点击率(CTR)和转化率。
`ad_clicks` 示例表
`cart_addition` 示例表
答案 1SELECT 2
a.ad_id, 3 COUNT(DISTINCT a.user_id) AS
total_clicks, 4 COUNT(DISTINCT c.user_id) AS
total_conversions, 5 COUNT(DISTINCT c.user_id)*1.0 / COUNT(DISTINCT a.user_id) * 100.0 AS
conversion_rate 6FROM 7
ad_clicks a 8LEFT JOIN 9
cart_addition c 10ON11 a.ad_id = c.ad_id AND
a.user_id = c.user_id 12GROUP BY13
a.ad_id;
将 ad_clicks 和 cart_addition 表按 ad_id 和 user_id 连接。
按 ad_id 分组,计算两个表中 user_id 的独一数量。
total_conversions 除以 total_clicks 便是转化率。
十、谷歌宣传活动表现
做为谷歌宣传团队的数据分析师,需要分析一家客户在谷歌宣传上的各样宣传活动表现。
需求找出上个月每次活动及这些活动中的每一个宣传组的平均每次点击的成本(CPC)。CPC 是所有点击的总成本除以点击次数。
宣传点击数据表 ad_clicks 如下。
`ad_clicks` 示例表
输出结果示例
答案1SELECT2
campaign_id, 3
ad_group_id, 4 SUM(cost) / SUM(clicks) AS
avg_CPC 5FROM6
ad_clicks 7GROUP BY8
campaign_id, 9
ad_group_id;
该查找经过将 ad_clicks 表按 campaign_id 和 ad_group_id 分组。
而后,根据给定的公式(即总成本/总点击数)计算平均每次点击花费(avg_CPC)。
最后,返回每一个宣传系列和宣传组的平均点击花费。
11、在数据库的外键是什么?
外键是表中的一个或一组列,它引用另一个表中的主键。
外键约束有助于守护两个表之间的参照完整性。
`google_employees` 示例表
这里表中,employee_id 做为主键,而 manager_id 做为外键,由于它连接到员工的 employee_id。
运用外键创立员工与其上级经理之间的关系,便于查找某位员工的经理是谁。
google_employees 表还能够有多个引用其他表主键的外键。例如,能够添加 department_id 和 location_id 外键,用于将每一个员工连接到其所属分部和地点。
12、分析安卓游戏商店应用的内购数据
做为谷歌安卓游戏商店团队的数据分析师,需要供给在游戏商店应用内购买的数据分析。
编写一个 SQL 查找,查找客户及其近期一次购买的列表。结果应包括 customer_id、first name、last name、product 和近期购买日期。
`Customers` 示例表
`Purchases` 示例表
答案1SELECT
C.customer_id, 2
C.first_name, 3
C.last_name, 4
C.app, 5 MAX(P.date) AS
latest_purchase_date 6FROM
Customers C 7JOIN
 urchases  8ON
C.customer_id = .customer_id 9GROUP BY
C.customer_id, C.first_name, C.last_name, C.app;
该查找在 customer_id 字段上连接 Customers 和 Google PlayStore Purchases 表。
而后,按客户的仔细信息进行分组,每一个客户表示一行。
另外,还运用了 MAX(P.date) 函数查询每一个客户的近期的购买日期。
(未完待续)
|