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

  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 belowselect 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(selectmachine_id, process_id, (max(Timestamp) - min(Timestamp)) as tiemintervalfromActivitygroup bymachine_id,process_id) as t2
group byt2.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
SELECTs.student_id,s.student_name,su.subject_name,COUNT(e.subject_name) AS attended_exams
FROMStudents AS s
JOINSubjects AS su
LEFT JOINExaminations AS e
ONe.student_id = s.student_id
ANDe.subject_name = su.subject_name
GROUP BYs.student_id,su.subject_name
ORDER BYs.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 cntfrom Employee as Manager join Employee as Reporton Manager.Id = Report.ManagerIdgroup 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 Idfrom Employeegroup by ManagerIdhaving 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;SELECTs.user_id,ROUND(IFNULL(AVG(c.action='confirmed'), 0), 2) AS confirmation_rate
FROMSignups AS s
LEFT JOINConfirmations AS c
ONs.user_id = c.user_id
GROUP BYs.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
SELECTproduct_id,IFNULL(Round(SUM(sales) / SUM(units), 2), 0) AS average_price
FROM (SELECTPrices.product_id AS product_id,Prices.price * UnitsSold.units AS sales,UnitsSold.units AS unitsFROM Prices LEFT JOIN UnitsSold ON Prices.product_id = UnitsSold.product_idAND (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
SELECTproject_id,ROUND(AVG(e.experience_years), 2) AS average_years
FROMProject as p 
LEFT JOINEmployee as e
ONp.employee_id = e.employee_id
GROUP BYp.project_id;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubeadm 安装 Kubernetes 高可用集群 v1.30.0

1、修改主机名&#xff08;各个节点&#xff09; hostnamectl set-hostname xxx2、hosts 文件加入主机名&#xff08;全部节点&#xff09; cat /etc/hosts 192.168.88.5 master1 192.168.88.6 master2 192.168.88.7 master3 192.168.88.8 node13、关闭防火墙&#xff08;全部…

网上蛋糕售卖店管理系(Java+SpringBoot+MySQL)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装网上蛋糕售卖店管理系统软件来发挥其高效地信息处理的作用…

Ubuntu安装不同版本的opencv,并任意切换使用

参考&#xff1a; opencv笔记&#xff1a;ubuntu安装opencv以及多版本共存 | 高深远的博客 https://zhuanlan.zhihu.com/p/604658181 安装不同版本opencv及共存、切换并验证。_pkg-config opencv --modversion-CSDN博客 Ubuntu下多版本OpenCV共存和切换_ubuntu20如同时安装o…

自由学习记录(25)

只要有修改&#xff0c;子表就不用元表的参数了&#xff0c;用自己的参数&#xff08;只不过和元表里的那个同名&#xff09; 子表用__index“继承”了父表的值&#xff0c;此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里&#xff0c; 传参要传具体的变…

1- 9 C 语言面向对象

面向对象的基本特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 1.0 面向过程概念 当我们在编写程序时&#xff0c;通常采用以下步骤&#xff1a; 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…

路面泥泞,坑洼,裂缝,路面损坏,马路牙检测 YOLO标记资源整理

数据集介绍 可识别常见的路面泥泞&#xff0c;坑洼&#xff0c;裂缝&#xff0c;路面损坏&#xff0c;马路牙等多种路面状况。 数据集分割 训练集89&#xff05; 2052图片 validation集8% 186图片 test集3% 78图片 预处理 自动定向&#xff1a; 已应用 自动调…

Jmeter中的测试片段和非测试原件

1&#xff09;测试片段 1--测试片段 功能特点 重用性&#xff1a;将常用的测试元素组合成一个测试片段&#xff0c;便于在多个线程组中重用。模块化&#xff1a;提高测试计划的模块化程度&#xff0c;使测试计划更易于管理和维护。灵活性&#xff1a;可以通过模块控制器灵活地…

Cocos编辑器

1、下载 下载地址&#xff1a;https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…

JAVA题目笔记(二十)Stream流综合练习+方法引用

一、数据过滤 import java.util.*; import java.util.stream.Collectors;public class Co {public static void main(String[] args) {List<Integer> listnew ArrayList<>();Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);List<Integer> newlist list.str…

计算机操作系统——进程控制(Linux)

进程控制 进程创建fork&#xff08;&#xff09;函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出&#xff08;Exit&#xff09;由于信号终止非…

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP) 内存映射模式&#xff0c;是将设备在内核态申请的用于存储视频数据的物理内存映射到用户空间&#xff0c;使得用户应用程序可以直接访问和操作设备数据物理内存&#xff0c;避免了数据的拷贝。因此采集速度较快&#x…

零地址挂页

零地址 如果我们有比较好的C编程基础&#xff0c;我们就会知道&#xff0c;我们在代码中定义了一个零地址或者空指针&#xff0c;那么它实际上会指向虚拟内存的零地址&#xff0c;多数操作系统&#xff0c;包括Win&#xff0c;在进程创建的时候&#xff0c;都会空出前64k的空间…

QT6学习第四天 感受QT的文件编译

QT6学习第四天 感受QT的文件编译 使用纯代码编写程序新建工程 使用其他编辑器纯代码编写程序并在命令行运行使用 .ui 表单文件生成界面使用自定义 C 窗口类使用现成的QT Designer界面类 使用纯代码编写程序 我们知道QT Creator中可以用拖拽的方式在 .ui 文件上布局&#xff0c…

windows安全中心,永久卸载工具分享

使用方法 2024Goby红队版工具分享&#xff0c;附2024年漏洞POC下载 下载链接&#xff1a; https://pan.quark.cn/s/4fc2712a2afc一路回车&#xff0c;选项Y即可 耐心等待几秒种&#xff0c;自动重启 此时打开windows安全中心&#xff0c;已经完全不能使用了&#xff0c;响应…

jvm核心组件介绍

1. 类加载器&#xff08;ClassLoader&#xff09;&#xff1a; • 想象它是一个快递员&#xff0c;负责把Java类&#xff08;.class文件&#xff09;这个“包裹”从磁盘这个“发货地”送到JVM内部这个“目的地”。类加载器确保每个类只被加载一次&#xff0c;并维护一个类的层级…

目标检测,图像分割,超分辨率重建

目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务&#xff0c;它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为&#xff1a;语义分割、实例分割、全景分割。 语义分割&#xff08;Semantic Segmentation&#xff09;&…

Python编程技巧:多变量赋值的优雅艺术

在Python编程的世界里&#xff0c;有许多令人惊叹的语法特性&#xff0c;而多变量赋值就像是一颗闪耀的明珠&#xff0c;它不仅让代码更优雅&#xff0c;还能提升程序的执行效率。今天我们就深入探讨这个看似简单却蕴含深意的编程技巧。 基础认识 传统的变量赋值方式&#xff…

CentOS 7 安装部署 KVM

1.关闭虚拟机 打开相关选项 打开虚拟机centos7 连接xshell 测试网络&#xff0c;现在就是没问题的&#xff0c;因为我们要使用网络源 安装 GNOME 桌面环境 安装KVM 模块 安装KVM 调试工具 构建虚拟机的命令行工具 qemu 组件,创建磁盘、启动虚拟机等 输入这条命令&#xff0c;…

微信小程序学习指南从入门到精通

&#x1f5fd;微信小程序学习指南从入门到精通&#x1f5fd; &#x1f51d;微信小程序学习指南从入门到精通&#x1f51d;✍前言✍&#x1f4bb;微信小程序学习指南前言&#x1f4bb;一、&#x1f680;文章列表&#x1f680;二、&#x1f52f;教程文章的好处&#x1f52f;1. ✅…

【C++】读取数量不定的输入数据

读取数量不定的输入数据 似乎是一个很实用的东西&#xff1f; 问题&#xff1a; 我们如何对用户输入的一组数&#xff08;事先不知道具体有多少个数&#xff09;求和&#xff1f; 这需要不断读取数据直至没有新的输入为止。&#xff08;所以我们的代码就是这样设计的&#x…