前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这几道SQL面试题都不会,别干数分啦

这几道SQL面试题都不会,别干数分啦

作者头像
万能数据的小草
发布2024-07-23 15:15:47
820
发布2024-07-23 15:15:47
举报
文章被收录于专栏:万能的小草

一、连续问题(14 天连续登录)

假设您有一个user_login表,包含user_id(用户ID)和log_date(用户每次登录的时间戳)字段,我们想要找出连续10天登录过的用户。下面是一个更简洁易懂的解释以及对应的SQL查询模板:

实现思路:

  1. 因为每天用户登录次数可能不止一次,所以需要先按照用户每天的登录日期去重计算。
  2. 再用row_number() over(partition by _ order by _)函数将用户id分组,按照登录时间进行排序。
  3. 计算登录日期减去第二步骤得到的结果值,用户连续登录情况下,每次相减的结果都相同。
  4. 按照id和日期分组并求和,筛选大于等于7的即为连续7天登录的用户。

代码实现

代码语言:javascript
复制
SELECT user_id, MAX(count_num) AS max_count  -- 查出了最大连续登陆,where>=14,即14天连续
FROM (
-- group by相同日期
SELECT user_id, diff_date, COUNT(*) AS count_num
FROM (
-- 日期减rank,连续登陆的话,会得到相同日期
SELECT user_id, log_date, date_sub(log_date, CAST(rn AS INT)) AS diff_date

FROM (
--  打上rank标识
SELECT user_id, log_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY log_date) AS rn
FROM user_login

    ) c
  ) d
GROUP BY user_id, diff_date

) e
GROUP BY user_id;

二、首次购买问题

用一条 SQL 语句查询 女朋友首次购买各类化妆品的记录。

可以使用SQL的窗口函数或者子查询来找到每个用户的首次购买记录。下面是一个使用SQL查询来解决这个问题的示例:

假设你有一个名为purchases的表,其中包含以下字段:

  • user_id: 用户的ID
  • product_id: 产品的ID
  • purchase_date: 购买日期

你可以使用以下SQL查询来找到每个用户的首次购买产品的ID:

代码实现

代码语言:javascript
复制
WITH RankedPurchases AS (  
    SELECT  
        user_id,  
        product_id,  
        purchase_date,  
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY purchase_date ASC) AS rn  
    FROM  
        purchases  
)  
SELECT  
    user_id,  
    product_id AS first_purchased_product_id  
FROM  
    RankedPurchases  
WHERE  
    rn = 1;
这个查询的工作原理


  1. 在RankedPurchases的CTE(公共表表达式)中,我们使用ROW_NUMBER()窗口函数对每个用户的购买记录按照购买日期进行排序。PARTITION BY user_id表示我们为每个用户单独编号,ORDER BY purchase_date ASC表示按照购买日期进行升序排列。这样,每个用户的首次购买记录将被编号为1。
  2. 在主查询中,我们从RankedPurchases中选择user_id和product_id,但只选择编号为1的记录,即每个用户的首次购买记录。

执行这个查询后,你将得到一个包含每个用户及其首次购买产品ID的结果集。

三、课程成绩问题

用一条 SQL 语句查询高三8班,每门课都大于 90 分的学生清单。

解决办法一:having

思路:如果分数最少的课程都大于90分,那所有的课程分数,肯定都大于90分!

代码实现

代码语言:javascript
复制

SELECT name
FROM xuesheng
GROUP BY name
HAVING MIN(score)> 90
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 万能数据的小草 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、首次购买问题
  • 三、课程成绩问题
    • 解决办法一:having
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档