数分之SQL查询电商数据案例

news2024/11/17 1:41:52

1,Python连接SQL数据库

以下是使用Python连接MySQL数据库并进行操作的示例代码:

import random
import time
import pymysql

# 定义名字数据
xing = ["王", "李", "张", "刘", "陈", "杨", "黄", "赵", "吴", "周"]
ming = ["伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋"]

# 连接数据库
conn = pymysql.connect(
    host="192.168.1.80",
    user="admin",
    password="123",
    database="management_systems",
    charset="utf8"
)
cursor = conn.cursor()

# 生成随机生日
a1 = (1980, 1, 1, 0, 0, 0, 0, 0, 0)
a2 = (2000, 12, 31, 23, 59, 59, 0, 0, 0)
start = time.mktime(a1)
end = time.mktime(a2)

# 插入学生数据
for i in range(1, 37):
    for j in range(1, 51):
        random_xing = random.randint(0, len(xing) - 1)
        random_ming = random.randint(0, len(ming) - 1)
        t = random.randint(start, end)
        date_t = time.localtime(t)
        birthday = time.strftime("%Y-%m-%d", date_t)
        sql = f"INSERT INTO student(class_id, student_name, student_birthday, sex) VALUES ({i}, '{xing[random_xing]}{ming[random_ming]}', '{birthday}', {random.randint(0, 1)})"
        cursor.execute(sql)

conn.commit()

# 查询数据
sql = """
SELECT 
    s.class_id, 
    c.class_name, 
    s.student_name, 
    s.student_birthday, 
    s.sex 
FROM 
    student s 
JOIN 
    class c 
ON 
    s.class_id = c.class_id
WHERE 
    s.student_birthday > '1990-01-01' 
ORDER BY 
    s.class_id, s.student_birthday;
"""
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
    print(row)

# 关闭连接
cursor.close()
conn.close()

2,模拟数据库

假设我们有一个偏真实的电商数据库,其中包括以下几张主要数据表:

  • users:用户信息表
  • products:产品信息表
  • orders:订单表
  • order_items:订单详情表
  • reviews:产品评论表

以下是这些表的结构和部分复杂的SQL操作示例:

数据表结构

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    category VARCHAR(50),
    price DECIMAL(10, 2),
    stock INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE order_items (
    order_item_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT,
    price DECIMAL(10, 2),
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

CREATE TABLE reviews (
    review_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT,
    user_id INT,
    rating INT CHECK (rating BETWEEN 1 AND 5),
    comment TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES products(product_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

插入数据

import pymysql
import random
import time

# 连接数据库
conn = pymysql.connect(
    host="192.168.1.80",
    user="admin",
    password="123",
    database="ecommerce",
    charset="utf8"
)
cursor = conn.cursor()

# 插入用户数据
users = [("user1", "user1@example.com"), ("user2", "user2@example.com")]
for user in users:
    sql = f"INSERT INTO users(username, email) VALUES ('{user[0]}', '{user[1]}')"
    cursor.execute(sql)

# 插入产品数据
products = [("Product1", "Category1", 100.00, 10), ("Product2", "Category2", 200.00, 20)]
for product in products:
    sql = f"INSERT INTO products(product_name, category, price, stock) VALUES ('{product[0]}', '{product[1]}', {product[2]}, {product[3]})"
    cursor.execute(sql)

conn.commit()

# 插入订单和订单详情数据
order_data = [(1, '2024-01-01', 300.00), (2, '2024-01-02', 400.00)]
order_items_data = [(1, 1, 2, 100.00), (1, 2, 1, 200.00), (2, 1, 3, 300.00)]

for order in order_data:
    sql = f"INSERT INTO orders(user_id, order_date, total_amount) VALUES ({order[0]}, '{order[1]}', {order[2]})"
    cursor.execute(sql)

for item in order_items_data:
    sql = f"INSERT INTO order_items(order_id, product_id, quantity, price) VALUES ({item[0]}, {item[1]}, {item[2]}, {item[3]})"
    cursor.execute(sql)

conn.commit()

# 插入评论数据
reviews = [(1, 1, 5, "Excellent product!"), (2, 2, 4, "Very good.")]
for review in reviews:
    sql = f"INSERT INTO reviews(product_id, user_id, rating, comment) VALUES ({review[0]}, {review[1]}, {review[2]}, '{review[3]}')"
    cursor.execute(sql)

conn.commit()
cursor.close()
conn.close()

3,复杂查询示例

-- 查询每个用户的订单总金额及订单数量
SELECT 
    u.user_id, 
    u.username, 
    COUNT(o.order_id) AS order_count, 
    SUM(o.total_amount) AS total_spent 
FROM 
    users u 
LEFT JOIN 
    orders o 
ON 
    u.user_id = o.user_id 
GROUP BY 
    u.user_id, u.username;

-- 查询每个产品的平均评分及评论数量
SELECT 
    p.product_id, 
    p.product_name, 
    AVG(r.rating) AS average_rating, 
    COUNT(r.review_id) AS review_count 
FROM 
    products p 
LEFT JOIN 
    reviews r 
ON 
    p.product_id = r.product_id 
GROUP BY 
    p.product_id, p.product_name;

-- 查询订单详情,包含订单信息、用户信息及产品信息
SELECT 
    o.order_id, 
    u.username, 
    o.order_date, 
    p.product_name, 
    oi.quantity, 
    oi.price 
FROM 
    orders o 
JOIN 
    users u 
ON 
    o.user_id = u.user_id 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
JOIN 
    products p 
ON 
    oi.product_id = p.product_id;

-- 查询每个用户在每个类别上的花费总金额
SELECT 
    u.user_id, 
    u.username, 
    p.category, 
    SUM(oi.price * oi.quantity) AS total_spent 
FROM 
    users u 
JOIN 
    orders o 
ON 
    u.user_id = o.user_id 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
JOIN 
    products p 
ON 
    oi.product_id = p.product_id 
GROUP BY 
    u.user_id, u.username, p.category;

-- 查询在2024年每个月的销售总额和销售量
SELECT 
    YEAR(o.order_date) AS year, 
    MONTH(o.order_date) AS month, 
    SUM(oi.price * oi.quantity) AS total_sales, 
    SUM(oi.quantity) AS total_quantity 
FROM 
    orders o 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
WHERE 
    YEAR(o.order_date) = 2024 
GROUP BY 
    YEAR(o.order_date), MONTH(o.order_date);

通过这些示例,您可以看到如何使用Python连接数据库,生成和插入随机数据,以及进行复杂的SQL查询。

(交个朋友/技术接单/ai办公/性价比资源,注明来意)

e6dc3a6f9b5a4fb29434c33a001b09d0.png

 

 

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

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

相关文章

2024年 云南 融资融券怎么开通,利率多少?4.2

一个小动作,每年节约几万块? 勤俭节约的传统,真的在很多年轻人当中是被嫌弃的,有人要说“吃多了对身体也不好”、“反正食堂饭菜很便宜”之类 但是有效利用资源的观念还是需要培养的。最近了解到很多朋友在券商融资利率很高6%&a…

Pyinstaller打包exe文件解决指南

打包命令 打包 Python 文件 输入如下格式的命令即可 默认命令 Pyinstaller 文件名.py Pyinstaller -option1 -option2 -... 要打包的文件 Pyinstaller 文件名.pyPyinstaller -option1 -option2 -... 要打包的文件 参数选项比较多,这里我列一个表:…

Downie 4 for Mac:视频下载的新选择

对于Mac用户来说,想要轻松下载网上的视频内容,Downie 4无疑是一个绝佳的选择。这款专为Mac打造的视频下载工具,凭借其强大的功能和简洁的操作界面,让视频下载变得轻松又高效。 Downie 4支持从众多网站下载视频,包括各…

LeetCode --- 399周赛

题目列表 3162. 优质数对的总数 I 3163. 压缩字符串 III 3164. 优质数对的总数 II 3165. 不包含相邻元素的子序列的最大和 一、优质数对的总数I 这里由于数据范围比较小,我们可以直接暴力枚举,代码如下 class Solution { public:int numberOfPairs…

STP19NF20 丝印 19NF20 场效应管19A 200V 直插 TO-220

STP19NF20 功率MOSFET的应用领域相当广泛,主要包括: 1. 电源管理:用于高效率电源管理电路,如直流-直流转换器和交流-直流电源适配器。 2. 开关模式电源(SMPS):在需要高效能和紧凑型尺寸的开关…

汽车悬架分为哪几类

汽车悬架分为哪几类 1)汽车的悬架系统可根据结构分为两种:独立悬架和非独立悬架,独立悬架根据构造又可以分为CDC运动悬架(CDC电磁悬架系统)和空气悬架; 2)当前比较火热的空气悬架,是独立悬架的一种; 3)前轮主要使用麦弗逊式独立悬架 和 双叉臂悬架,后轮主要使用多…

本特利330130-040-01-00 PLC模块深度解析 询价联系ID

本特利330130-040-01-00 PLC模块深度解析 在工业自动化领域,准确、高效的数据采集和监控是确保生产安全、提高生产效率的关键。本特利(Bently Nevada)作为全球知名的工业自动化和监控设备制造商,其生产的330130-040-01-00 PLC模块…

实验一 MyBatis框架实验

一、实验环境 Windows10、IDEA2023.1.2、mybatis 3.5.6、DataGr 二、实验目的与要求 1、掌握 MyBatis 开发环境的搭建; 2、熟悉 MyBatis 的开发步骤; 3、掌握 MyBatis 基本对象、配置文件和映射文件的使用; 4、掌握 MyBatis 动态 SQL 开…

基于 DCT 的图像滤波

需求分析 对于图像去噪这一需求,我们可以通过DCT(离散余弦变换)算法来实现。DCT是一种基于频域的变换技术,可以将图像从空间域转换为频域,然后通过滤波等处理方式进行去噪。 针对这一需求,我们需要进行以下…

Android --- Room数据库(Java)

概念 Room 是一个持久性库,属于 Android Jetpack 的一部分。Room 是 SQLite 数据库之上的一个抽象层。SQLite 使用一种专门的语言 (SQL) 来执行数据库操作。Room 并不直接使用 SQLite,而是负责简化数据库设置和配置以及与数据库交互方面的琐碎工作。此…

使用Python类的构造函数和析构函数

1、问题背景 当使用Python类时,可以使用构造函数和析构函数来初始化和清理类实例。构造函数在创建类实例时自动调用,而析构函数在删除类实例时自动调用。 在上面的代码示例中,Person类具有一个构造函数__init__和一个析构函数__del__。构造…

PHP MySQL图解学习指南:开启Web开发新篇章

PHP曾经是最流行的Web开发语言,许多世界领先的网站(如Facebook、维基百科和WordPress)都是用它编写的。PHP运行在Web服务器端,通过使用存储在MySQL数据库中的数据,使得网站可以为每一位访问者显示不同的定制页面。书中采用简单、直观的图示化…

大模型智力升级:AI的未来之路

大模型的发展引领了人工智能的新时代,其强大的数据处理和学习能力在医疗、金融、教育等众多领域取得了令人瞩目的成就。然而,随之而来的挑战也不容忽视。尽管大模型在特定任务上展现出了卓越的性能,但它们在理解复杂语境、处理未见情况的能力…

Linux内网中安装jdk1.8详细教程

本章教程,主要介绍如何在内网环境中配置JDK1.8环境变量 一、下载Linux版压缩包 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载完成之后,通过XFTP等工具,将安装包上传到内网服务器 二、安装配置步骤 1、解压压缩包 tar -zxvf /usr/local/jdk-…

[Qt]关于QListWidget、QScrollArea 为什么在QDesigner上设置了之后界面上仍然不生效的问题

前言 最近做了一些有关QListWidget和QScrollArea的控件,我去,这两个控件是真的坑,明明我在QDesigner的操作界面上对这两个控件的界面进行了修改,但是编译出来的软件就是看上去什么都没有,很坑,Gpt也没解决…

html 引用vue3 element 首次加载缩成一团 挤在一起

问题:原生html引用vue,element plus 分析: vue.js, element脚本过大,首次加载网络慢的话,会是缩在这里,没完全渲染 解决: 没加载之前,不显示div,显示一个加载提示语 改动地方app…

CatDDoS僵尸网络与DNSBomb攻击:DDOS攻击最新变种

在近期的网络安全领域,两大严峻挑战浮出水面,为中国乃至全球的网络防护体系敲响了警钟。中国安全厂商奇安信的X实验室团队揭露了一波名为CatDDoS的恶意软件攻击浪潮,与此同时,一种创新且隐蔽的拒绝服务攻击技术——DNSBomb&#x…

揭秘IDM:数字资产管理的未来之星

在当今数字化时代,数字资产管理的重要性日益凸显。随着科技的飞速发展,越来越多的企业和个人开始关注如何有效管理和保护他们的数字资产。在这个过程中,IDM(身份管理系统)逐渐成为了热门话题。IDM作为一种新兴的技术手…

云原生网关 MSE-Higress

云原生网关 MSE-Higress 什么是云原生网关MSEMSE测评产品文档产品能力产品控制台 MSE与其他网关 什么是云原生网关MSE 在体验云原生网关 MSE-Higress功能之前,先了解一下什么是云原生网关 MSE,简单的说就是MSE就是遵循开源 Ingress/Gateway API 标准的下…

探数API分享-全球电价一览:谁最高,谁最低?

全球家庭用电价格的平均水平约为0.139美元/千瓦时,这是根据2021年12月的统计数据得出的。在这个平均水平之上,有一些国家的家庭用电价格远超过这个数值,特别是在欧洲的一些发达国家。 丹麦、荷兰、德国、英国、西班牙、比利时等国家的家庭用…