大数据面试SQL题-笔记02【查询、连接、聚合函数】

news2024/11/27 12:05:54
  1. 大数据面试SQL题复习思路一网打尽!(文档见评论区)_哔哩哔哩_bilibili
  2. Hive SQL 大厂必考常用窗口函数及相关面试题

  1. 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】
  2. 大数据面试SQL题-笔记02【查询、连接、聚合函数】​​​​​​​

目录

01、查询

01-1757. 可回收且低脂的产品

02-0584. 寻找用户推荐人

03-0595. 大的国家

04-1148. 文章浏览 I

05-1683. 无效的推文

02、连接

06-1378. 使用唯一标识码替换员工ID

07-1068. 产品销售分析 I

08-1581. 进店却未进行过交易的顾客

09-0197. 上升的温度

10-1661. 每台机器的进程平均运行时间

11-0577. 员工奖金

12-1280. 学生们参加各科测试的次数

13-0570. 至少有5名直接下属的经理

14-1934. 确认率

03、聚合函数

15-0620. 有趣的电影

16-1251. 平均售价

17-1075. 项目员工 I


01、查询

01-1757. 可回收且低脂的产品

# Write your MySQL query statement below
select product_id from Products where low_fats = 'Y' and recyclable = 'Y';

02-0584. 寻找用户推荐人

!= 与 <> 都是 不等于。

# Write your MySQL query statement below
select name from Customer where referee_id is null or referee_id != 2;
select name from Customer where referee_id is null or referee_id <> 2;

03-0595. 大的国家

# Write your MySQL query statement below
select name, population, area from World where area >=3000000 or population >= 25000000;

04-1148. 文章浏览 I

# Write your MySQL query statement below
select distinct author_id as id from Views where author_id = viewer_id order by author_id;

05-1683. 无效的推文

在MySQL中,你可以使用LENGTH()函数来获取字符串的长度。

SELECT LENGTH('Hello, world!') AS string_length;

# Write your MySQL query statement below
select tweet_id from Tweets where length(content) > 15;

02、连接

06-1378. 使用唯一标识码替换员工ID

LEFT JOIN ... ON ...

# Write your MySQL query statement below
# select EmployeeUNI.unique_id, Employees.name from Employees join EmployeeUNI where Employees.id = EmployeeUNI.id;
SELECT 
    EmployeeUNI.unique_id, Employees.name
FROM 
    Employees
LEFT JOIN 
    EmployeeUNI 
ON 
    Employees.id = EmployeeUNI.id;

07-1068. 产品销售分析 I

在 SQL 中,INNER JOINJOIN 是相同的,它们都用于连接两个或多个表,只返回满足连接条件的行。在实践中,它们通常可以互换使用,因为大多数 SQL 数据库都将它们视为等效的。INNER JOINJOIN 的默认形式,因此在大多数情况下,简单地写 JOIN 就足够了。

# Write your MySQL query statement below
select Product.product_name, Sales.year, Sales.price from Sales join Product on Sales.product_id = Product.product_id;

/* Write your T-SQL query statement below */
--写法一:
select p.product_name, s.year, s.price 
from Sales s
inner join Product p 
    on s.product_id = p.product_id 

--写法二:
select p.product_name, s.year, s.price 
from Sales s
join Product p 
using (product_id)

08-1581. 进店却未进行过交易的顾客

GROUP BY 语句将会按照 customer_id 列进行分组,然后 COUNT(*) 函数会计算每个分组中的行数,即每个客户ID的访问次数。

# Write your MySQL query statement below
select Visits.customer_id, count(Visits.customer_id) as count_no_trans
from Visits left join Transactions on Visits.visit_id = Transactions.visit_id
where Transactions.transaction_id is null -- where Transactions.amount is null
group by(Visits.customer_id)
-- order by count_no_trans desc

09-0197. 上升的温度

DATEDIFF() 是 MySQL 中用来计算两个日期之间的差异的函数。基本语法如下:

DATEDIFF(date1, date2)

  • date1date2 是你想要计算差异的两个日期。
  • 结果是 date1date2 之间的天数差。

例如:

SELECT DATEDIFF('2024-04-15', '2024-04-10');

这个查询将返回 5,因为 2024 年 4 月 10 日和 2024 年 4 月 15 日之间有 5 天。

你也可以在表中使用列:

SELECT DATEDIFF(end_date, start_date) AS days_difference FROM orders;

这将计算 orders 表中每一行的 end_datestart_date 列之间的天数差,并将结果别名为 days_difference

# Write your MySQL query statement below
select a.id from Weather as a, Weather as b 
    where datediff(a.recordDate, b.recordDate) = 1 and a.Temperature >b.Temperature;

select a.id from Weather as a inner join Weather as b 
    where datediff(a.recordDate, b.recordDate) = 1 and a.Temperature >b.Temperature;

10-1661. 每台机器的进程平均运行时间

# Write your MySQL query statement below

select a1.machine_id, round(avg(a2.timestamp -a1.timestamp ), 3) as processing_time 
    from Activity as a1 join Activity as a2 on 
    a1.machine_id = a2.machine_id and 
    a1.process_id = a2.process_id and 
    a1.activity_type = 'start' and a2.activity_type = 'end' 
    group by machine_id;

CAST() 是 MySQL 中用于将一个表达式转换为指定数据类型的函数。它的基本语法如下:

CAST(expression AS data_type)

  • expression 是你要转换的表达式或值。
  • data_type 是你希望将表达式转换为的目标数据类型。

例如,如果你有一个字符串类型的列,并且想将它转换为整数类型,你可以使用 CAST() 函数:

SELECT CAST('123' AS SIGNED);

这将返回整数 123

或者,你可以将一个整数转换为字符串类型:

SELECT CAST(456 AS CHAR);

这将返回字符串 '456'

CAST() 函数可以用于多种数据类型之间的转换,包括整数、浮点数、日期等。

DECIMAL(10, 3) 是 MySQL 中用于定义精确数字数据类型的方式之一。在这个数据类型中,数字被存储为十进制数,并且允许指定总共有多少位数(包括小数点前后的数字)以及小数点后有多少位数。

具体来说,DECIMAL(10, 3) 定义了一个包含 10 位数字的数字,其中 3 位是小数位。这意味着这个数字可以存储从 -9999999.999 到 9999999.999 之间的数值,其中整数部分最多可以有 7 位数字,小数部分最多可以有 3 位数字。

例如,12345.678 是一个符合 DECIMAL(10, 3) 定义的数字,而 123456789.0123 则不符合,因为它的整数部分有 10 位数字,超出了限制。

-- 分为两层计算,第一层先按照machine_id和process_id分组,再计算组内最大值和最小值的差,就等同于end-start.
-- 第二层再按照machine_id分组,求平均.
select t2.machine_id, cast(avg(t2.tieminterval) as decimal(10, 3)) as processing_time 
from
    (select
        machine_id, process_id, (max(Timestamp) - min(Timestamp)) as tieminterval
    from
        Activity
    group by
        machine_id,process_id) as t2
group by
    t2.machine_id;

11-0577. 员工奖金

在 MySQL 中,可以使用以下几种表连接方式:

  1. INNER JOIN:

    • INNER JOIN 返回两个表中共有的匹配行。
  2. LEFT JOIN (或 LEFT OUTER JOIN):

    • LEFT JOIN 返回左表中的所有行,以及右表中与左表中的行匹配的行。
  3. RIGHT JOIN (或 RIGHT OUTER JOIN):

    • RIGHT JOIN 返回右表中的所有行,以及左表中与右表中的行匹配的行。
  4. FULL JOIN (或 FULL OUTER JOIN):

    • FULL JOIN 返回左右两个表中的所有行,并且对于不匹配的行,会在结果集中填充 NULL 值。
  5. CROSS JOIN(JOIN):

    • CROSS JOIN 返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行的组合。
  6. SELF JOIN:

    • SELF JOIN 是指对同一表进行连接操作,即连接表中的行与表中其他行进行比较。

以上是 MySQL 中常见的表连接方式,可以根据需要选择合适的连接方式来检索数据。

# Write your MySQL query statement below
select Employee.name, Bonus.bonus from Employee left join Bonus on Employee.empId = Bonus.empId 
where Bonus.bonus < 1000 or Bonus.bonus is null;

12-1280. 学生们参加各科测试的次数

解题思路:

  1. Student表和Subjects表进行笛卡尔积连接(Student JOIN Subjects)
  2. 在第一点的基础上拼接Examinations中的每个学生参加每门科目的数量。
  3. 根据案例可以看出,学生名单必须完整,在Examinations表中不存在则为0。所以使用左连接LEFT JOIN进行连接(Student JOIN Subjects LEFT JOIN Examinations)
  4. 注意排序不是按Examinations表进行排序的,因为存在NULL,下图就是第四个字段就是Examinations的student_id。

# Write your MySQL query statement below
SELECT
    s.student_id,
    s.student_name,
    su.subject_name,
   COUNT(e.subject_name) AS attended_exams
FROM
    Students AS s
JOIN
    Subjects AS su
LEFT JOIN
    Examinations AS e
ON
    e.student_id = s.student_id
AND
    e.subject_name = su.subject_name
GROUP BY
    s.student_id,
    su.subject_name
ORDER BY
    s.student_id,
    su.subject_name;

13-0570. 至少有5名直接下属的经理

在 MySQL 中,HAVING 子句通常与 GROUP BY 子句一起使用,用于对分组后的结果进行筛选。HAVING 子句允许你基于聚合函数的结果来过滤结果集。

例如,假设你有一个名为 sales 的表,其中包含销售数据,你想要找出每个销售人员的总销售额,并且只显示销售额大于 1000 的销售人员。你可以这样查询:

SELECT salesperson, SUM(amount) AS total_sales FROM sales GROUP BY salesperson HAVING total_sales > 1000;

在这个查询中,SUM(amount) 是一个聚合函数,它计算每个销售人员的总销售额。然后,HAVING total_sales > 1000 筛选出总销售额大于 1000 的销售人员。

总的来说,HAVING 子句与 WHERE 子句类似,但是 HAVING 用于过滤分组后的结果,而 WHERE 用于过滤未分组的原始数据。

# Write your MySQL query statement below
select Name
from (
  select Manager.Name as Name, count(Report.Id) as cnt
  from Employee as Manager join Employee as Report
  on Manager.Id = Report.ManagerId
  group by Manager.Id
) as ReportCount
where cnt >= 5;

select Manager.Name as Name
from Employee as Manager join Employee as Report
on Manager.Id = Report.ManagerId
group by Manager.Id
having count(Report.Id) >= 5;

select Employee.Name as Name
from (
  select ManagerId as Id
  from Employee
  group by ManagerId
  having count(Id) >= 5
) as Manager join Employee
on Manager.Id = Employee.Id;

14-1934. 确认率

if、ifnull

# Write your MySQL query statement below
select s.user_id, round(count(if(c.action='confirmed', 1, null))/count(*), 2) as confirmation_rate
from Signups s left join Confirmations c
on s.user_id = c.user_id
group by s.user_id;

SELECT
    s.user_id,
    ROUND(IFNULL(AVG(c.action='confirmed'), 0), 2) AS confirmation_rate
FROM
    Signups AS s
LEFT JOIN
    Confirmations AS c
ON
    s.user_id = c.user_id
GROUP BY
    s.user_id;

03、聚合函数

15-0620. 有趣的电影

mod(id,2)=1 来确定奇数 id

MySQL 中判断奇数的 6 种方法:

  1. mod(x, 2) = 1 ,如果余数是 1 就是奇数。
  2. power(-1, x) = -1 , 如果结果是 -1 就是奇数
  3. x % 2 = 1 ,如果余数是 1 就是奇数。
  4. x & 1 = 1 ,如果是 1 就是奇数
  5. x regexp '[1, 3, 5, 7, 9]$' = 1 如果为 1 就是奇数
  6. x>>1<<1 != x 如果右移一位在左移一位不等于原值,就是奇数。
# Write your MySQL query statement below
select * from cinema where description != "boring" and id%2 != 0 order by rating desc;

16-1251. 平均售价

在 MySQL 中,ROUND() 函数用于将数字值四舍五入到指定的小数位数。它的语法如下:ROUND(number, decimals)

  • number 是要四舍五入的数字。
  • decimals 是保留的小数位数,可以是负数来指定要四舍五入的位置。
# Write your MySQL query statement below
SELECT
    product_id,
    IFNULL(Round(SUM(sales) / SUM(units), 2), 0) AS average_price
FROM (
    SELECT
        Prices.product_id AS product_id,
        Prices.price * UnitsSold.units AS sales,
        UnitsSold.units AS units
    FROM Prices 
    LEFT JOIN UnitsSold ON Prices.product_id = UnitsSold.product_id
    AND (UnitsSold.purchase_date BETWEEN Prices.start_date AND Prices.end_date)
) T
GROUP BY product_id;

17-1075. 项目员工 I

MySQL是一种流行的关系型数据库管理系统,它提供了许多函数来执行各种操作。以下是你提到的几个函数的用法:

  1. ROUND():

    • 用途:ROUND函数用于将数值四舍五入到指定的小数位数。
    • 语法:ROUND(number, decimals)
      • number: 要四舍五入的数值。
      • decimals: 指定的小数位数。
    • 示例:

      SELECT ROUND(123.456, 2); -- 返回 123.46 SELECT ROUND(123.456); -- 返回 123

  2. AVG():

    • 用途:AVG函数用于计算某列的平均值。
    • 语法:AVG(expression)
      • expression: 要计算平均值的列或表达式。
    • 示例:

      SELECT AVG(column_name) FROM table_name; -- 计算列的平均值 SELECT AVG(5 + 5) FROM table_name; -- 计算表达式的平均值

  3. SUM():

    • 用途:SUM函数用于计算某列中所有值的总和。
    • 语法:SUM(expression)
      • expression: 要计算总和的列或表达式。
    • 示例:

      SELECT SUM(column_name) FROM table_name; -- 计算列值的总和 SELECT SUM(5 + 5) FROM table_name; -- 计算表达式值的总和

# Write your MySQL query statement below
SELECT
    project_id,
    ROUND(AVG(e.experience_years), 2) AS average_years
FROM
    Project as p 
LEFT JOIN
    Employee as e
ON
    p.employee_id = e.employee_id
GROUP BY
    p.project_id;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python中while循环】

一、深拷贝、浅拷贝 1、需求 1&#xff09;拷贝原列表产生一个新列表 2&#xff09;想让两个列表完全独立开&#xff08;针对改操作&#xff0c;读的操作不改变&#xff09; 要满足上述的条件&#xff0c;只能使用深拷贝 2、如何拷贝列表 1&#xff09;直接赋值 # 定义一个…

51单片机从入门到精通:理论与实践指南入门篇(二)

续51单片机从入门到精通&#xff1a;理论与实践指南&#xff08;一&#xff09;https://blog.csdn.net/speaking_me/article/details/144067372 第一篇总体给大家在&#xff08;全局&#xff09;总体上讲解了一下51单片机&#xff0c;那么接下来几天结束详细讲解&#xff0c;从…

【pyspark学习从入门到精通20】机器学习库_3

目录 使用 ML 预测婴儿生存几率 加载数据 创建转换器 创建估计器 创建管道 拟合模型 使用 ML 预测婴儿生存几率 在这一部分&#xff0c;我们将使用前一章中的数据集的一部分来介绍 PySpark ML 的概念。 在这一部分&#xff0c;我们将再次尝试预测婴儿的生存几率。 加载…

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层&#xff1a;传输设备。原始电信号比特流。数据链路层&#xff1a;代表是交换机。物理地址寻址&#xff0c;交…

LLamafactory 批量推理与异步 API 调用效率对比实测

背景 在阅读 LLamafactory 的文档时候&#xff0c;发现它支持批量推理: 推理.https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/inference.html 。 于是便想测试一下&#xff0c;它的批量推理速度有多快。本文实现了 下述两种的大模型推理&#xff0c;并对…

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 &#xff08;1&#xff09;ID定位 &…

Table 滚动条始终停靠在可视区域的底部

1. 话题引入 存在这样一个场景&#xff1a;当页面尺寸发生变化时&#xff0c;希望滚动条能够随之动态调整&#xff0c;始终展示在 table 的可视区域的最下方&#xff0c;而不是整个 table 本身的最底部。 这种行为可以提升用户的使用体验&#xff0c;尤其是在处理大数据表格时…

【漏洞复现】CVE-2020-13925

漏洞信息 NVD - CVE-2020-13925 Similar to CVE-2020-1956, Kylin has one more restful API which concatenates the API inputs into OS commands and then executes them on the server; while the reported API misses necessary input validation, which causes the hac…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…

快速理解微服务中Gateway的概念

一.基本概念 定义&#xff1a; 在微服务架构中&#xff0c;Spring Cloud Gateway 是一个用于API网关的框架&#xff0c;它是一个基于 Spring Framework 的高效、可扩展的路由器和反向代理&#xff0c;它能够将外部请求转发到适当的微服务&#xff0c;并提供一些与请求处理相关…

Java【多线程】(1)进程与线程

目录 1.前言 2.正文 2.1什么是进程 2.2PCB&#xff08;进程控制块&#xff09; 2.2.1进程id 2.2.2内存指针 2.2.3文件描述符表 2.2.4进程状态 2.2.4.1就绪状态 2.2.4.2阻塞状态 2.2.5进程优先级 2.2.6进程上下文 2.2.7进程的记账信息 2.3CPU操作进程的方法 2.4什…

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核&#xff0c;鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征&#xff0c;性能超越Linux内核10.7%。 鸿蒙内核更弹性&#xff1a;元OS架构&#xff0c;性能安全双收益 万…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

构造函数的相关

文章目录 一、构造函数 今天我们要来讲解类的默认成员函数之一的构造函数。 一、构造函数 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时&…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…

计算机网络八股整理(一)

计算机网络八股文整理 一&#xff1a;网络模型 1&#xff1a;网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型&#xff0c;它由七层组成&#xff0c;从上到下分别是&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;…

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容&#xff0c;对应操作是&#xff1a; QString curorui->textEdit->toPlainText();然后显示到标签上&#xff0c;对应操作是&#xff1a; …

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…

AI智能体崛起:从“工具”到“助手”的进化之路

目录 AI智能体的崛起 AI智能体的定义与决策模型 AI智能体的特点与优势 AI智能体的应用与类型 面临的挑战 未来展望 近年来&#xff0c;人工智能领域的焦点正从传统的聊天机器人&#xff08;Chat Bot&#xff09;快速转向更具潜力的AI智能体&#xff08;AI Agent&#xff…