当前位置: 首页 > news >正文

[每日一练]销售分析(通过数据的0/1转换进行是否存在的查询)

#该题目来源于力扣:

1083. 销售分析 II - 力扣(LeetCode)

题目要求:

表:Product+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| product_id   | int     |
| product_name | varchar |
| unit_price   | int     |
+--------------+---------+
Product_id 是该表的主键(具有唯一值的列)。
该表的每一行表示每种产品的名称和价格。
表:Sales+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| seller_id   | int     |
| product_id  | int     |
| buyer_id    | int     |
| sale_date   | date    |
| quantity    | int     |
| price       | int     |
+------ ------+---------+
这个表可能有重复的行。
product_id 是 Product 表的外键(reference 列)。
buyer_id 永远不会是 NULL。
sale_date 永远不会是 NULL。
该表的每一行都包含一次销售的一些信息。编写一个解决方案,报告那些买了 S8 而没有买 iPhone 的 买家。注意,S8 和 iPhone 是 Product 表中显示的产品。以 任意顺序 返回结果表。结果格式如下所示。示例 1:输入:
Product table:
+------------+--------------+------------+
| product_id | product_name | unit_price |
+------------+--------------+------------+
| 1          | S8           | 1000       |
| 2          | G4           | 800        |
| 3          | iPhone       | 1400       |
+------------+--------------+------------+
Sales table:
+-----------+------------+----------+------------+----------+-------+
| seller_id | product_id | buyer_id | sale_date  | quantity | price |
+-----------+------------+----------+------------+----------+-------+
| 1         | 1          | 1        | 2019-01-21 | 2        | 2000  |
| 1         | 2          | 2        | 2019-02-17 | 1        | 800   |
| 2         | 1          | 3        | 2019-06-02 | 1        | 800   |
| 3         | 3          | 3        | 2019-05-13 | 2        | 2800  |
+-----------+------------+----------+------------+----------+-------+
输出:
+-------------+
| buyer_id    |
+-------------+
| 1           |
+-------------+
解释:
id 为 1 的买家购买了一部 S8,但是却没有购买 iPhone,而 id 为 3 的买家却同时购买了这 2 部手机。

思路流程:

思维混乱,不如先看看将两个表合并后的数据:

# Write your MySQL query statement below
SELECT *#S.seller_id 
FROM Sales S join Product P on S.product_id = P.product_id| seller_id | product_id | buyer_id | sale_date  | quantity | price | product_id | product_name | unit_price |
| --------- | ---------- | -------- | ---------- | -------- | ----- | ---------- | ------------ | ---------- |
| 1         | 1          | 1        | 2019-01-21 | 2        | 2000  | 1          | S8           | 1000       |
| 1         | 2          | 2        | 2019-02-17 | 1        | 800   | 2          | G4           | 800        |
| 2         | 1          | 3        | 2019-06-02 | 1        | 800   | 1          | S8           | 1000       |
| 3         | 3          | 3        | 2019-05-13 | 2        | 2800  | 3          | iPhone       | 1400       |

可以统计每一个买家购买的商品情况,把购买的商品名字进行0,1转换,建立所有关于商品名字的列,如果用户购买过,返回1,否则返回0.大概思路为:

CASE WHEN product_name = '指定的商品' THEN 1 ELSE F END 自定义列名

由于MySQL分组聚合的特性:如果在 GROUP BY 中不使用聚合函数(如 SUMCOUNTAVG 等),那么 SQL 处理分组时就无法确定应该返回哪个值。标准 SQL 要求在 GROUP BY 的结果集中,除了分组列外,其他列必须用聚合函数处理。我们使用子查询实现:

# Write your MySQL query statement below
select *
from (select buyer_id,
case when product_name='S8' THEN 1 ELSE 0 end T,
case when product_name='iPhone' THEN 1 ELSE 0 END F
FROM Product P RIGHT JOIN Sales S ON P.product_id = S.product_id) A

可见成功的将商品购买数据转化为0/1形式:

| buyer_id | T | F |
————————————————————
| 1        | 1 | 0 |
| 2        | 0 | 0 |
| 3        | 1 | 0 |
| 3        | 0 | 1 |

最后进行分组聚合,按照buyer_id分组,在having条件字段里聚合T和F,条件为T(S8)的累加值>0,说明该客户至少买了一次以上的S8,F(iPhone)的累加值=0,说明该客户一次iPhone都没买过:

# Write your MySQL query statement below
select *
from (select buyer_id,
case when product_name='S8' THEN 1 ELSE 0 end T,
case when product_name='iPhone' THEN 1 ELSE 0 END F
FROM Product P RIGHT JOIN Sales S ON P.product_id = S.product_id) A
GROUP BY buyer_id 
HAVING SUM(T)>0 AND SUM(F)=0

0/1数据转化可以帮助在清洗数据的时候更好的辨别某些分类数据是否存在,极大的便利了后续的分析工作

相关文章:

[每日一练]销售分析(通过数据的0/1转换进行是否存在的查询)

#该题目来源于力扣: 1083. 销售分析 II - 力扣(LeetCode) 题目要求: 表:Product----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varch…...

.NET Core WebApi第7讲:项目的发布与部署

一、理解 前端跟后端拿数据,然后在前端页面中展示,就是我们要完成的事情。 把前端跟后端开发好之后,我们需要落地部署,这个时候就需要一个服务器。 服务器就是一台电脑,只要windows里面有一个叫IIS的管理器。 二、项目…...

【python 将数据写入csv文件】正确方式

data [{username: jack, password: 1234}, ……]# 保存为CSV文件 with open(IP_output.csv, w, newline, encodingutf-8) as file:fieldnames [username, password]writer csv.DictWriter(file, fieldnamesfieldnames, quotingcsv.QUOTE_NONE)writer.writeheader() # 写入列…...

OpenCV4.8 开发实战系列专栏之 10 - 像素值统计

大家好,欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。 专栏代码全部基于C++ 与Python双语演示,专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点:像素值统计 最小(min)最大(max)均值(mean)标准方差(standard deviation)API知识点 最大最小值min…...

pandas计算相关性并画热力图

实现这个功能有很多方法,但是下面的方法还是比较优雅的: cols ["ASSET", "HOUSES", "INCOME", "DEBT", "EDUC"] corr df[cols].corr() corr.style.background_gradient(axisNone)讲解: …...

初始Docker

概述: 容器,作为云原生技术的重要组成部分,与虚拟机一样,均属于虚拟化技术的范畴。然而,容器技术以其独特的优势,在虚拟化领域中脱颖而出。与虚拟机不同,容器能够摆脱操作系统的束缚&#xff0…...

Redis-概念、安装、基本配置

文章目录 一、Redis及Redis集群概念、分布式系统概念一-1 Redis是什么一-2 什么是分布式系统、分布式缓存一-3 什么是Redis集群、实现Redis集群的方法有哪些、这些跟Redis的sentinel和cluster有什么关系一-4 Redis的库一-5 Redis中的Key与Value是什么、如何进行操作使用它们添加…...

qt QPlainTextEdit详解

QPlainTextEdit是一个功能强大、易于使用的纯文本编辑器/查看器。它使用与QTextEdit相同的技术和概念,但是为纯文本的处理进行了优化,因此更适合处理大型纯文本文档。QPlainTextEdit不提供富文本编辑功能,如字体、颜色、大小等的格式化&#…...

【机器学习】23. 聚类-GMM: Gaussian Mixture Model

1. 定义和假设 定义:probabilistic clustering(model-base) 假设:数据服从正态分布 2. 算法内容 我们假设数据是由k个高斯(正态)分布混合生成的。每个分布有2个参数:μ和σ。 一个分布对应一…...

深度探索C++对象模型

文章目录 前言一、关于对象C对象模型 二、构造函数实例分析 拷贝构造函数程序转化语意学(Program Transformation Semantics)成员初始化列表 三、数据语义学(The Semantics of Data)数据存取多种继承情况讨论仅单一继承加上虚函数多重继承虚拟继承 Pointer to Data Members 四、…...

电脑怎么设置开机密码:保障个人信息安全的第一步

在数字化时代,个人信息的安全至关重要。电脑作为我们日常工作和生活中不可或缺的设备,存储了大量的私人数据和敏感信息。为了防止未经授权的访问,设置开机密码是保护个人隐私和信息安全的基本措施之一。本文将详细介绍如何在不同操作系统下为…...

MybatisPlus入门(六)MybatisPlus-null值处理

一、MybatisPlus-null值处理 1.1)问题引入: 在查询中遇到如下情况,有部分筛选条件没有值,如商品价格有最大值和最小值,商品价格部分时候没有值。 1.2)解决办法: 步骤一:新建查询实…...

红帽认证有必要考吗?这四大人群推荐考取!

红帽认证(Red Hat Certification)作为全球公认的Linux技能认证,对于某些特定人群来说,考取这一认证无疑是一个明智的选择。本文将探讨红帽认证的必要性,并为四类人群提供考取红帽认证的建议。 1. IT专业人士 对于IT专业人士来说&#xff0…...

基于SSM+微信小程序的社团登录管理系统(社团1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…...

html中cookie如何存储

在HTML中,可以使用JavaScript来创建、读取和删除cookie。以下是创建和读取cookie的基本示例: 创建cookie: function setCookie(name, value, daysToLive) { var cookie name "" encodeURIComponent(value); if (typeof daysToLive …...

C++基础三(构造函数,形参默认值,函数重载,单例模式,析构函数,内联函数,拷贝构造函数)

C有六个默认函数,分别是: 1、默认构造函数; 2、默认拷贝构造函数; 3、默认析构函数; 4、赋值运算符; 5、取址运算符; 6、取址运算符const; 构造函数 构造函数(初始化类成员变量): 1、属于类的成员函数之一 …...

Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

在之前的 3.10 里, Flutter 的 Impeller 在 iOS 上支持了 P3 广色域图像渲染,但是当时也仅仅是当具有广色域图像或渐变时,Impeller 才会在 iOS 上显示 P3 的广色域的颜色,而如果你使用的是 Color API,会发现使用的还是…...

如何使用VBA识别Excel中的“单元格中的图片”(2/2)

Excel 365升级了新功能,支持两种不同的插入图片方式: 放置在单元格中(Place in cell),新功能,此操作插入的图片下文中简称为单元格中的图片。放置在单元格上(Place over cell)&…...

2024系统架构师---下午题目常考概念

1.管道-过滤器的概念:管道-过滤器风格具备高内聚、低耦合、支持软件重用、扩展性好、支持并发等优点,但它有编写复杂、不适合处理交互应用等缺点。 2.隐式调用的概念:隐式调用基于事件触发的思想,具备支持软件重用,改…...

【Linux】从零开始认识五种IO模型 --- 理解五种IO模型,开始使用非阻塞IO

恐惧让你沦为囚犯, 希望让你重获自由。 --- 《肖申克的救赎》--- 五种IO模型与阻塞IO 1 前言2 五种IO模型3 非阻塞IO 1 前言 通过网络通信的学习,我们能够理解网络通信的本质是进程间通信,而进程间通信的本质就是IO。 IO就是input与outp…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...