Commit 396700dd authored by chenzk's avatar chenzk
Browse files

v1.0

parents
Pipeline #2603 failed with stages
in 0 seconds
import os
import random
import string
from datetime import datetime, timedelta
from typing import List
import pymysql
import pymysql.cursors
# At first you need to create an test database which called dbgpt_test;
# you can use next command to create.
# CREATE DATABASE IF NOT EXISTS dbgpt_test CHARACTER SET utf8;
def build_table(connection):
connection.cursor().execute(
"""CREATE TABLE user (
id INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
name VARCHAR(50) NOT NULL COMMENT '用户名',
email VARCHAR(50) NOT NULL COMMENT '电子邮件',
mobile CHAR(11) NOT NULL COMMENT '手机号码',
gender VARCHAR(20) COMMENT '性别,可选值:Male, Female',
birth DATE COMMENT '出生日期',
country VARCHAR(20) COMMENT '国家',
city VARCHAR(20) COMMENT '城市',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';"""
)
connection.cursor().execute(
"""CREATE TABLE transaction_order (
id INT(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
order_no CHAR(20) NOT NULL COMMENT '订单编号',
product_name VARCHAR(50) NOT NULL COMMENT '产品名称',
product_category VARCHAR(20) COMMENT '产品分类',
amount DECIMAL(10, 2) NOT NULL COMMENT '订单金额',
pay_status VARCHAR(20) COMMENT '付款状态,可选值:CANCEL, REFUND, SUCCESS, FAILD',
user_id INT(11) NOT NULL COMMENT '用户ID',
user_name VARCHAR(50) COMMENT '用户名',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_order_no (order_no),
KEY idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单表';"""
)
def user_build(names: List, country: str, grander: str = "Male") -> List:
countries = ["China", "US", "India", "Indonesia", "Pakistan"] # 国家列表
cities = {
"China": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen", "Hangzhou"],
"US": ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"],
"India": ["Mumbai", "Delhi", "Bangalore", "Hyderabad", "Chennai"],
"Indonesia": ["Jakarta", "Surabaya", "Medan", "Bandung", "Makassar"],
"Pakistan": ["Karachi", "Lahore", "Faisalabad", "Rawalpindi", "Multan"],
}
users = []
for i in range(1, len(names) + 1):
if grander == "Male":
id = int(str(countries.index(country) + 1) + "10") + i
else:
id = int(str(countries.index(country) + 1) + "20") + i
name = names[i - 1]
email = f"{name}@example.com"
mobile = "".join(random.choices(string.digits, k=10))
gender = grander
birth = f"19{random.randint(60, 99)}-{random.randint(1, 12):02d}-{random.randint(1, 28):02d}"
country = country
city = random.choice(cities[country])
now = datetime.now()
year = now.year
start = datetime(year, 1, 1)
end = datetime(year, 12, 31)
random_date = start + timedelta(days=random.randint(0, (end - start).days))
random_time = datetime.combine(random_date, datetime.min.time()) + timedelta(
seconds=random.randint(0, 24 * 60 * 60 - 1)
)
random_datetime_str = random_time.strftime("%Y-%m-%d %H:%M:%S")
create_time = random_datetime_str
users.append(
(
id,
name,
email,
mobile,
gender,
birth,
country,
city,
create_time,
create_time,
)
)
return users
def gnerate_all_users(cursor):
users = []
users_f = ["ZhangWei", "LiQiang", "ZhangSan", "LiSi"]
users.extend(user_build(users_f, "China", "Male"))
users_m = ["Hanmeimei", "LiMeiMei", "LiNa", "ZhangLi", "ZhangMing"]
users.extend(user_build(users_m, "China", "Female"))
users1_f = ["James", "John", "David", "Richard"]
users.extend(user_build(users1_f, "US", "Male"))
users1_m = ["Mary", "Patricia", "Sarah"]
users.extend(user_build(users1_m, "US", "Female"))
users2_f = ["Ravi", "Rajesh", "Ajay", "Arjun", "Sanjay"]
users.extend(user_build(users2_f, "India", "Male"))
users2_m = ["Priya", "Sushma", "Pooja", "Swati"]
users.extend(user_build(users2_m, "India", "Female"))
for user in users:
cursor.execute(
"INSERT INTO user (id, name, email, mobile, gender, birth, country, city, create_time, update_time) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
user,
)
return users
def gnerate_all_orders(users, cursor):
orders = []
orders_num = 200
categories = ["Clothing", "Food", "Home Appliance", "Mother and Baby", "Travel"]
categories_product = {
"Clothing": ["T-shirt", "Jeans", "Skirt", "Other"],
"Food": ["Snack", "Fruit"],
"Home Appliance": ["Refrigerator", "Television", "Air conditioner"],
"Mother and Baby": ["Diapers", "Milk Powder", "Stroller", "Toy"],
"Travel": ["Tent", "Fishing Rod", "Bike", "Rawalpindi", "Multan"],
}
for i in range(1, orders_num + 1):
id = i
order_no = "".join(random.choices(string.ascii_uppercase, k=3)) + "".join(
random.choices(string.digits, k=10)
)
product_category = random.choice(categories)
product_name = random.choice(categories_product[product_category])
amount = round(random.uniform(0, 10000), 2)
pay_status = random.choice(["SUCCESS", "FAILD", "CANCEL", "REFUND"])
user_id = random.choice(users)[0]
user_name = random.choice(users)[1]
now = datetime.now()
year = now.year
start = datetime(year, 1, 1)
end = datetime(year, 12, 31)
random_date = start + timedelta(days=random.randint(0, (end - start).days))
random_time = datetime.combine(random_date, datetime.min.time()) + timedelta(
seconds=random.randint(0, 24 * 60 * 60 - 1)
)
random_datetime_str = random_time.strftime("%Y-%m-%d %H:%M:%S")
create_time = random_datetime_str
order = (
id,
order_no,
product_category,
product_name,
amount,
pay_status,
user_id,
user_name,
create_time,
)
cursor.execute(
"INSERT INTO transaction_order (id, order_no, product_name, product_category, amount, pay_status, user_id, user_name, create_time) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
order,
)
if __name__ == "__main__":
connection = pymysql.connect(
host=os.getenv("DB_HOST", "127.0.0.1"),
port=int(
os.getenv("DB_PORT", 3306),
),
user=os.getenv("DB_USER", "root"),
password=os.getenv("DB_PASSWORD", "aa12345678"),
database=os.getenv("DB_DATABASE", "dbgpt_test"),
charset="utf8mb4",
ssl_ca=None,
)
build_table(connection)
connection.commit()
cursor = connection.cursor()
users = gnerate_all_users(cursor)
connection.commit()
gnerate_all_orders(users, cursor)
connection.commit()
cursor.execute("SELECT * FROM user")
data = cursor.fetchall()
print(data)
cursor.execute("SELECT count(*) FROM transaction_order")
data = cursor.fetchall()
print("orders:" + str(data))
cursor.close()
connection.close()
import os
import random
import string
from datetime import datetime, timedelta
from typing import List
import sqlite3
# Change the database name to the desired SQLite file name.
DATABASE_NAME = "dbgpt_test.db"
def build_table(connection):
cursor = connection.cursor()
cursor.execute(
"""CREATE TABLE IF NOT EXISTS user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
mobile TEXT NOT NULL,
gender TEXT,
birth DATE,
country TEXT,
city TEXT,
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);"""
)
cursor.execute(
"""CREATE TABLE IF NOT EXISTS transaction_order (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_no TEXT NOT NULL UNIQUE,
product_name TEXT NOT NULL,
product_category TEXT,
amount REAL NOT NULL,
pay_status TEXT,
user_id INTEGER NOT NULL,
user_name TEXT,
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);"""
)
connection.commit()
def user_build(names: List[str], country: str, gender: str = "Male") -> List:
countries = ["China", "US", "India", "Indonesia", "Pakistan"]
cities = {
"China": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen", "Hangzhou"],
"US": ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"],
"India": ["Mumbai", "Delhi", "Bangalore", "Hyderabad", "Chennai"],
"Indonesia": ["Jakarta", "Surabaya", "Medan", "Bandung", "Makassar"],
"Pakistan": ["Karachi", "Lahore", "Faisalabad", "Rawalpindi", "Multan"],
}
users = []
for name in names:
email = f"{name}@example.com"
mobile = "".join(random.choices(string.digits, k=11))
birth = f"19{random.randint(60, 99)}-{random.randint(1, 12):02d}-{random.randint(1, 28):02d}"
city = random.choice(cities[country])
create_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
users.append(
(
name,
email,
mobile,
gender,
birth,
country,
city,
create_time,
create_time,
)
)
return users
def generate_all_users(cursor):
users = []
users_f = ["ZhangWei", "LiQiang", "ZhangSan", "LiSi"]
users.extend(user_build(users_f, "China", "Male"))
users_m = ["Hanmeimei", "LiMeiMei", "LiNa", "ZhangLi", "ZhangMing"]
users.extend(user_build(users_m, "China", "Female"))
users1_f = ["James", "John", "David", "Richard"]
users.extend(user_build(users1_f, "US", "Male"))
users1_m = ["Mary", "Patricia", "Sarah"]
users.extend(user_build(users1_m, "US", "Female"))
users2_f = ["Ravi", "Rajesh", "Ajay", "Arjun", "Sanjay"]
users.extend(user_build(users2_f, "India", "Male"))
users2_m = ["Priya", "Sushma", "Pooja", "Swati"]
users.extend(user_build(users2_m, "India", "Female"))
for user in users:
cursor.execute(
"INSERT INTO user (name, email, mobile, gender, birth, country, city, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
user,
)
return users
def generate_all_orders(users, cursor):
orders = []
orders_num = 200
categories = ["Clothing", "Food", "Home Appliance", "Mother and Baby", "Travel"]
categories_product = {
"Clothing": ["T-shirt", "Jeans", "Skirt", "Other"],
"Food": ["Snack", "Fruit"],
"Home Appliance": ["Refrigerator", "Television", "Air conditioner"],
"Mother and Baby": ["Diapers", "Milk Powder", "Stroller", "Toy"],
"Travel": ["Tent", "Fishing Rod", "Bike"],
}
for i in range(orders_num):
id = i + 1 # Simple incremental ID
order_no = "".join(random.choices(string.ascii_uppercase, k=3)) + "".join(
random.choices(string.digits, k=10)
)
product_category = random.choice(categories)
product_name = random.choice(categories_product[product_category])
amount = round(random.uniform(0, 10000), 2)
pay_status = random.choice(["SUCCESS", "FAILED", "CANCEL", "REFUND"])
user_id = random.choice(users)[0]
user_name = random.choice(users)[1]
create_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
order = (
id,
order_no,
product_name,
product_category,
amount,
pay_status,
user_id,
user_name,
create_time,
)
cursor.execute(
"INSERT INTO transaction_order (id, order_no, product_name, product_category, amount, pay_status, user_id, user_name, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
order,
)
if __name__ == "__main__":
connection = sqlite3.connect(DATABASE_NAME)
build_table(connection)
cursor = connection.cursor()
users = generate_all_users(cursor)
generate_all_orders(users, cursor)
connection.commit()
cursor.execute("SELECT * FROM user")
data = cursor.fetchall()
print(data)
cursor.execute("SELECT COUNT(*) FROM transaction_order")
data = cursor.fetchall()
print("orders: " + str(data))
cursor.close()
connection.close()
序号,大项,明细,备注,预算,实际,费用小计,超额,已支出,支出小计,其他
1,中央空调,内外机,1拖5 140 31600,30600,30600,30600,0,30600,30600,
2,基装,地砖,,106000,32100,107948.4,1948.4,32100,107948.4,1948.4
3,,地板,,,,,,,,
4,,门,颜色升级,,37450,,,37450,,
5,,橱柜,浴柜、马桶、花洒 自选,,,,,,,
6,,卫生间墙地,,,28149.4,,,28149.4,,
7,,厨房,墙、地(大改小增项)、菜盆去掉自选,,,,,,,
8,,打拆改建,,,10249,,,10249,,
9,其他费用,物业装修管理费(物业),405.58,26936.23,405.58,20836.23,-6100,405.58,20036.23,
10,,建渣清运费(物业),281.65,,281.65,,,281.65,,
11,,打拆清运费(物业),1300,,1300,,,1300,,
,,预交水费,200,,200,,,200,,
,,客卧加墙,1500,,1500,,,1500,,
,,天然气暗改,1800,,1800,,,1800,,
,,天然气明改,719,,719,,,719,,
,,开槽(150),0,,0,,,0,,
,,防水增加,358,,358,,,358,,
,,墙砖背胶(大砖上墙加背胶),208,,208,,,208,,
,,美缝3000,3100,,3100,,,2500,,
,,淋浴隔断(18980439828),3130,,3130,,,3130,,
,,橱柜增加费用,4500,,,,,,,
,,电费,200,,200,,,200,,
,,门锁,844,,844,,,844,,
,,空调机位封窗,1500,,1500,,,1300,,
,,开关灯安装,1000,,,,,,,
,,空调机位门,600,,,,,,,
,,瓷白胶,190,,190,,,190,,
,,瓷白胶人工,300,,300,,,300,,
,,每逢增加(橱柜浴柜),,,,,,,,
,,乳胶漆人工,,,,,,,,
12,,乳胶漆自购,4800,,4800,,,4800,,
13,水电改造,材料,16446,18636,16446,18425,-211,16446,18425,
14,,人工,,,,,,,,
,,开关插座补,531,,320,,,320,,
15,,开关插座,1659,,1659,,,1659,,
16,封窗,,15000,14500,14500,14500,0,4500,14500,
,,,,,,,,8000,,
17,,,,,,,,2000,,
18,基装(自购),马桶*2,9000,8200,8200,20000,,8200,20000,
19,,花洒*2,3000,4000,4000,,,4000,,
20,,浴柜*2,5000,4600,4600,,,4600,,
21,,菜盆,2500,3200,3200,,,3200,,
22,衣柜定做,鞋柜亮面、衣柜肤质、板材克诺斯邦、侧面表层,40*730,33000,5000,31000,,5000,31000,
23,,,,,15000,,,15000,,
,,,,,11000,,,11000,,
24,,,,,,,,,,
25,基础家电,燃气热水器,计划史密斯智能4000,3798,3798,18551,,3798,18841,24期免息
,,燃气热水器安装,,355,355,,,355,,
26,,洗碗机,计划西门子5999,6999,6999,,,6999,,
27,,冰箱,计划西门子,6000,,,,,,
28,,电视,,8000,,,,,,
,,洗衣机(安装),,290,,,,290,,
,,抽油烟机+灶具(升级),方太型号升级,3900,3900,,,3900,,
29,,洗衣机,计划西门子6500,3499,3499,,,3499,,
30,软装,沙发,15000,71799.8,,10877.8,,,9777.8,
31,,茶几,5000,,,,,,,
32,,电视柜,6000,,,,,,,
33,,餐桌,7000,,,,,,,
34,,床*2,7000,,,,,,,
,,床垫*2,13000,,,,,,,
,,窗帘,10400,,10500,,,9400,,
,,洞灯,399.8,,377.8,,,377.8,,
,,书桌,2000,,,,,,,
35,,灯具,6000,,,,,,,
36,合计,,,354313.03,272738.43,272738.43,-4362.6,,271128.43,-83184.6
37,,,,,,,,,,
38,双十一,,,,,38551,,,,
,,,,,,,,,,
\ No newline at end of file
import duckdb
import pymysql
""" migrate duckdb to mysql"""
mysql_config = {
"host": "127.0.0.1",
"user": "root",
"password": "your_password",
"db": "dbgpt",
"charset": "utf8mb4",
"cursorclass": pymysql.cursors.DictCursor,
}
duckdb_files_to_tables = {
"pilot/message/chat_history.db": "chat_history",
"pilot/message/connect_config.db": "connect_config",
}
conn_mysql = pymysql.connect(**mysql_config)
def migrate_table(duckdb_file_path, source_table, destination_table, conn_mysql):
conn_duckdb = duckdb.connect(duckdb_file_path)
try:
cursor = conn_duckdb.cursor()
cursor.execute(f"SELECT * FROM {source_table}")
column_names = [
desc[0] for desc in cursor.description if desc[0].lower() != "id"
]
select_columns = ", ".join(column_names)
cursor.execute(f"SELECT {select_columns} FROM {source_table}")
results = cursor.fetchall()
with conn_mysql.cursor() as cursor_mysql:
for row in results:
placeholders = ", ".join(["%s"] * len(row))
insert_query = f"INSERT INTO {destination_table} ({', '.join(column_names)}) VALUES ({placeholders})"
cursor_mysql.execute(insert_query, row)
conn_mysql.commit()
finally:
conn_duckdb.close()
try:
for duckdb_file, table in duckdb_files_to_tables.items():
print(f"Migrating table {table} from {duckdb_file}...")
migrate_table(duckdb_file, table, table, conn_mysql)
print(f"Table {table} migrated successfully.")
finally:
conn_mysql.close()
print("Migration completed.")
import sqlite3
import duckdb
""" migrate duckdb to sqlite"""
duckdb_files_to_tables = {
"pilot/message/chat_history.db": "chat_history",
"pilot/message/connect_config.db": "connect_config",
}
sqlite_db_path = "pilot/meta_data/dbgpt.db"
conn_sqlite = sqlite3.connect(sqlite_db_path)
def migrate_table(duckdb_file_path, source_table, destination_table, conn_sqlite):
conn_duckdb = duckdb.connect(duckdb_file_path)
try:
cursor_duckdb = conn_duckdb.cursor()
cursor_duckdb.execute(f"SELECT * FROM {source_table}")
column_names = [
desc[0] for desc in cursor_duckdb.description if desc[0].lower() != "id"
]
select_columns = ", ".join(column_names)
cursor_duckdb.execute(f"SELECT {select_columns} FROM {source_table}")
results = cursor_duckdb.fetchall()
cursor_sqlite = conn_sqlite.cursor()
for row in results:
placeholders = ", ".join(["?"] * len(row))
insert_query = f"INSERT INTO {destination_table} ({', '.join(column_names)}) VALUES ({placeholders})"
cursor_sqlite.execute(insert_query, row)
conn_sqlite.commit()
cursor_sqlite.close()
finally:
conn_duckdb.close()
try:
for duckdb_file, table in duckdb_files_to_tables.items():
print(f"Migrating table {table} from {duckdb_file} to SQLite...")
migrate_table(duckdb_file, table, table, conn_sqlite)
print(f"Table {table} migrated to SQLite successfully.")
finally:
conn_sqlite.close()
print("Migration to SQLite completed.")
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
# add example config
default-authentication-plugin=mysql_native_password
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
\ No newline at end of file
create database case_1_student_manager character set utf8;
use case_1_student_manager;
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100) COMMENT '学生姓名',
major VARCHAR(100) COMMENT '专业',
year_of_enrollment INT COMMENT '入学年份',
student_age INT COMMENT '学生年龄'
) COMMENT '学生信息表';
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100) COMMENT '课程名称',
credit FLOAT COMMENT '学分'
) COMMENT '课程信息表';
CREATE TABLE scores (
student_id INT,
course_id INT,
score INT COMMENT '得分',
semester VARCHAR(50) COMMENT '学期',
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
) COMMENT '学生成绩表';
INSERT INTO students (student_id, student_name, major, year_of_enrollment, student_age) VALUES
(1, '张三', '计算机科学', 2020, 20),
(2, '李四', '计算机科学', 2021, 19),
(3, '王五', '物理学', 2020, 21),
(4, '赵六', '数学', 2021, 19),
(5, '周七', '计算机科学', 2022, 18),
(6, '吴八', '物理学', 2020, 21),
(7, '郑九', '数学', 2021, 19),
(8, '孙十', '计算机科学', 2022, 18),
(9, '刘十一', '物理学', 2020, 21),
(10, '陈十二', '数学', 2021, 19);
INSERT INTO courses (course_id, course_name, credit) VALUES
(1, '计算机基础', 3),
(2, '数据结构', 4),
(3, '高等物理', 3),
(4, '线性代数', 4),
(5, '微积分', 5),
(6, '编程语言', 4),
(7, '量子力学', 3),
(8, '概率论', 4),
(9, '数据库系统', 4),
(10, '计算机网络', 4);
INSERT INTO scores (student_id, course_id, score, semester) VALUES
(1, 1, 90, '2020年秋季'),
(1, 2, 85, '2021年春季'),
(2, 1, 88, '2021年秋季'),
(2, 2, 90, '2022年春季'),
(3, 3, 92, '2020年秋季'),
(3, 4, 85, '2021年春季'),
(4, 3, 88, '2021年秋季'),
(4, 4, 86, '2022年春季'),
(5, 1, 90, '2022年秋季'),
(5, 2, 87, '2023年春季');
CREATE TABLE students (
student_id INTEGER PRIMARY KEY,
student_name VARCHAR(100),
major VARCHAR(100),
year_of_enrollment INTEGER,
student_age INTEGER
);
CREATE TABLE courses (
course_id INTEGER PRIMARY KEY,
course_name VARCHAR(100),
credit REAL
);
CREATE TABLE scores (
student_id INTEGER,
course_id INTEGER,
score INTEGER,
semester VARCHAR(50),
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
INSERT INTO students (student_id, student_name, major, year_of_enrollment, student_age) VALUES
(1, '张三', '计算机科学', 2020, 20),
(2, '李四', '计算机科学', 2021, 19),
(3, '王五', '物理学', 2020, 21),
(4, '赵六', '数学', 2021, 19),
(5, '周七', '计算机科学', 2022, 18),
(6, '吴八', '物理学', 2020, 21),
(7, '郑九', '数学', 2021, 19),
(8, '孙十', '计算机科学', 2022, 18),
(9, '刘十一', '物理学', 2020, 21),
(10, '陈十二', '数学', 2021, 19);
INSERT INTO courses (course_id, course_name, credit) VALUES
(1, '计算机基础', 3),
(2, '数据结构', 4),
(3, '高等物理', 3),
(4, '线性代数', 4),
(5, '微积分', 5),
(6, '编程语言', 4),
(7, '量子力学', 3),
(8, '概率论', 4),
(9, '数据库系统', 4),
(10, '计算机网络', 4);
INSERT INTO scores (student_id, course_id, score, semester) VALUES
(1, 1, 90, '2020年秋季'),
(1, 2, 85, '2021年春季'),
(2, 1, 88, '2021年秋季'),
(2, 2, 90, '2022年春季'),
(3, 3, 92, '2020年秋季'),
(3, 4, 85, '2021年春季'),
(4, 3, 88, '2021年秋季'),
(4, 4, 86, '2022年春季'),
(5, 1, 90, '2022年秋季'),
(5, 2, 87, '2023年春季');
CREATE SCHEMA case_1_student_manager;
COMMENT ON SCHEMA case_1_student_manager is '学校管理系统';
SET SEARCH_PATH = case_1_student_manager;
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100),
major VARCHAR(100),
year_of_enrollment INT,
student_age INT
);
COMMENT ON TABLE students IS '学生信息表';
COMMENT ON COLUMN students.student_name IS '学生姓名';
COMMENT ON COLUMN students.major IS '专业';
COMMENT ON COLUMN students.year_of_enrollment IS '入学年份';
COMMENT ON COLUMN students.student_age IS '学生年龄';
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100),
credit FLOAT
);
COMMENT ON TABLE courses IS '课程信息表';
COMMENT ON COLUMN courses.course_name IS '课程名称';
COMMENT ON COLUMN courses.credit IS '学分';
CREATE TABLE scores (
student_id INT,
course_id INT,
score INT,
semester VARCHAR(50),
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
COMMENT ON TABLE scores IS '学生成绩表';
COMMENT ON COLUMN scores.score IS '得分';
COMMENT ON COLUMN scores.semester IS '学期';
INSERT INTO students (student_id, student_name, major, year_of_enrollment, student_age) VALUES
(1, '张三', '计算机科学', 2020, 20),
(2, '李四', '计算机科学', 2021, 19),
(3, '王五', '物理学', 2020, 21),
(4, '赵六', '数学', 2021, 19),
(5, '周七', '计算机科学', 2022, 18),
(6, '吴八', '物理学', 2020, 21),
(7, '郑九', '数学', 2021, 19),
(8, '孙十', '计算机科学', 2022, 18),
(9, '刘十一', '物理学', 2020, 21),
(10, '陈十二', '数学', 2021, 19);
INSERT INTO courses (course_id, course_name, credit) VALUES
(1, '计算机基础', 3),
(2, '数据结构', 4),
(3, '高等物理', 3),
(4, '线性代数', 4),
(5, '微积分', 5),
(6, '编程语言', 4),
(7, '量子力学', 3),
(8, '概率论', 4),
(9, '数据库系统', 4),
(10, '计算机网络', 4);
INSERT INTO scores (student_id, course_id, score, semester) VALUES
(1, 1, 90, '2020年秋季'),
(1, 2, 85, '2021年春季'),
(2, 1, 88, '2021年秋季'),
(2, 2, 90, '2022年春季'),
(3, 3, 92, '2020年秋季'),
(3, 4, 85, '2021年春季'),
(4, 3, 88, '2021年秋季'),
(4, 4, 86, '2022年春季'),
(5, 1, 90, '2022年秋季'),
(5, 2, 87, '2023年春季');
COMMIT;
create database case_2_ecom character set utf8;
use case_2_ecom;
CREATE TABLE users (
user_id INT PRIMARY KEY,
user_name VARCHAR(100) COMMENT '用户名',
user_email VARCHAR(100) COMMENT '用户邮箱',
registration_date DATE COMMENT '注册日期',
user_country VARCHAR(100) COMMENT '用户国家'
) COMMENT '用户信息表';
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) COMMENT '商品名称',
product_price FLOAT COMMENT '商品价格'
) COMMENT '商品信息表';
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
product_id INT,
quantity INT COMMENT '数量',
order_date DATE COMMENT '订单日期',
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
) COMMENT '订单信息表';
INSERT INTO users (user_id, user_name, user_email, registration_date, user_country) VALUES
(1, 'John', 'john@gmail.com', '2020-01-01', 'USA'),
(2, 'Mary', 'mary@gmail.com', '2021-01-01', 'UK'),
(3, 'Bob', 'bob@gmail.com', '2020-01-01', 'USA'),
(4, 'Alice', 'alice@gmail.com', '2021-01-01', 'UK'),
(5, 'Charlie', 'charlie@gmail.com', '2020-01-01', 'USA'),
(6, 'David', 'david@gmail.com', '2021-01-01', 'UK'),
(7, 'Eve', 'eve@gmail.com', '2020-01-01', 'USA'),
(8, 'Frank', 'frank@gmail.com', '2021-01-01', 'UK'),
(9, 'Grace', 'grace@gmail.com', '2020-01-01', 'USA'),
(10, 'Helen', 'helen@gmail.com', '2021-01-01', 'UK');
INSERT INTO products (product_id, product_name, product_price) VALUES
(1, 'iPhone', 699),
(2, 'Samsung Galaxy', 599),
(3, 'iPad', 329),
(4, 'Macbook', 1299),
(5, 'Apple Watch', 399),
(6, 'AirPods', 159),
(7, 'Echo', 99),
(8, 'Kindle', 89),
(9, 'Fire TV Stick', 39),
(10, 'Echo Dot', 49);
INSERT INTO orders (order_id, user_id, product_id, quantity, order_date) VALUES
(1, 1, 1, 1, '2022-01-01'),
(2, 1, 2, 1, '2022-02-01'),
(3, 2, 3, 2, '2022-03-01'),
(4, 2, 4, 1, '2022-04-01'),
(5, 3, 5, 2, '2022-05-01'),
(6, 3, 6, 3, '2022-06-01'),
(7, 4, 7, 2, '2022-07-01'),
(8, 4, 8, 1, '2022-08-01'),
(9, 5, 9, 2, '2022-09-01'),
(10, 5, 10, 3, '2022-10-01');
CREATE TABLE users (
user_id INTEGER PRIMARY KEY,
user_name VARCHAR(100),
user_email VARCHAR(100),
registration_date DATE,
user_country VARCHAR(100)
);
CREATE TABLE products (
product_id INTEGER PRIMARY KEY,
product_name VARCHAR(100),
product_price REAL
);
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
user_id INTEGER,
product_id INTEGER,
quantity INTEGER,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
INSERT INTO users (user_id, user_name, user_email, registration_date, user_country) VALUES
(1, 'John', 'john@gmail.com', '2020-01-01', 'USA'),
(2, 'Mary', 'mary@gmail.com', '2021-01-01', 'UK'),
(3, 'Bob', 'bob@gmail.com', '2020-01-01', 'USA'),
(4, 'Alice', 'alice@gmail.com', '2021-01-01', 'UK'),
(5, 'Charlie', 'charlie@gmail.com', '2020-01-01', 'USA'),
(6, 'David', 'david@gmail.com', '2021-01-01', 'UK'),
(7, 'Eve', 'eve@gmail.com', '2020-01-01', 'USA'),
(8, 'Frank', 'frank@gmail.com', '2021-01-01', 'UK'),
(9, 'Grace', 'grace@gmail.com', '2020-01-01', 'USA'),
(10, 'Helen', 'helen@gmail.com', '2021-01-01', 'UK');
INSERT INTO products (product_id, product_name, product_price) VALUES
(1, 'iPhone', 699),
(2, 'Samsung Galaxy', 599),
(3, 'iPad', 329),
(4, 'Macbook', 1299),
(5, 'Apple Watch', 399),
(6, 'AirPods', 159),
(7, 'Echo', 99),
(8, 'Kindle', 89),
(9, 'Fire TV Stick', 39),
(10, 'Echo Dot', 49);
INSERT INTO orders (order_id, user_id, product_id, quantity, order_date) VALUES
(1, 1, 1, 1, '2022-01-01'),
(2, 1, 2, 1, '2022-02-01'),
(3, 2, 3, 2, '2022-03-01'),
(4, 2, 4, 1, '2022-04-01'),
(5, 3, 5, 2, '2022-05-01'),
(6, 3, 6, 3, '2022-06-01'),
(7, 4, 7, 2, '2022-07-01'),
(8, 4, 8, 1, '2022-08-01'),
(9, 5, 9, 2, '2022-09-01'),
(10, 5, 10, 3, '2022-10-01');
CREATE SCHEMA case_2_ecom;
COMMENT ON SCHEMA case_2_ecom is '电子商务系统';
SET SEARCH_PATH = case_2_ecom;
CREATE TABLE users (
user_id INT PRIMARY KEY,
user_name VARCHAR(100),
user_email VARCHAR(100),
registration_date DATE,
user_country VARCHAR(100)
);
COMMENT ON TABLE users IS '用户信息表';
COMMENT ON COLUMN users.user_name IS '用户名';
COMMENT ON COLUMN users.user_email IS '用户邮箱';
COMMENT ON COLUMN users.registration_date IS '注册日期';
COMMENT ON COLUMN users.user_country IS '用户国家';
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
product_price FLOAT
);
COMMENT ON TABLE products IS '商品信息表';
COMMENT ON COLUMN products.product_name IS '商品名称';
COMMENT ON COLUMN products.product_price IS '商品价格';
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
product_id INT,
quantity INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
COMMENT ON TABLE orders IS '订单信息表';
COMMENT ON COLUMN orders.quantity IS '数量';
COMMENT ON COLUMN orders.order_date IS '订单日期';
INSERT INTO users (user_id, user_name, user_email, registration_date, user_country) VALUES
(1, 'John', 'john@gmail.com', '2020-01-01', 'USA'),
(2, 'Mary', 'mary@gmail.com', '2021-01-01', 'UK'),
(3, 'Bob', 'bob@gmail.com', '2020-01-01', 'USA'),
(4, 'Alice', 'alice@gmail.com', '2021-01-01', 'UK'),
(5, 'Charlie', 'charlie@gmail.com', '2020-01-01', 'USA'),
(6, 'David', 'david@gmail.com', '2021-01-01', 'UK'),
(7, 'Eve', 'eve@gmail.com', '2020-01-01', 'USA'),
(8, 'Frank', 'frank@gmail.com', '2021-01-01', 'UK'),
(9, 'Grace', 'grace@gmail.com', '2020-01-01', 'USA'),
(10, 'Helen', 'helen@gmail.com', '2021-01-01', 'UK');
INSERT INTO products (product_id, product_name, product_price) VALUES
(1, 'iPhone', 699),
(2, 'Samsung Galaxy', 599),
(3, 'iPad', 329),
(4, 'Macbook', 1299),
(5, 'Apple Watch', 399),
(6, 'AirPods', 159),
(7, 'Echo', 99),
(8, 'Kindle', 89),
(9, 'Fire TV Stick', 39),
(10, 'Echo Dot', 49);
INSERT INTO orders (order_id, user_id, product_id, quantity, order_date) VALUES
(1, 1, 1, 1, '2022-01-01'),
(2, 1, 2, 1, '2022-02-01'),
(3, 2, 3, 2, '2022-03-01'),
(4, 2, 4, 1, '2022-04-01'),
(5, 3, 5, 2, '2022-05-01'),
(6, 3, 6, 3, '2022-06-01'),
(7, 4, 7, 2, '2022-07-01'),
(8, 4, 8, 1, '2022-08-01'),
(9, 5, 9, 2, '2022-09-01'),
(10, 5, 10, 3, '2022-10-01');
COMMIT;
CREATE TABLE order_wide_table (
-- order_base
order_id TEXT, -- 订单ID
order_no TEXT, -- 订单编号
parent_order_no TEXT, -- 父订单编号
order_type INTEGER, -- 订单类型:1实物2虚拟3混合
order_status INTEGER, -- 订单状态
order_source TEXT, -- 订单来源
order_source_detail TEXT, -- 订单来源详情
create_time DATETIME, -- 创建时间
pay_time DATETIME, -- 支付时间
finish_time DATETIME, -- 完成时间
close_time DATETIME, -- 关闭时间
cancel_time DATETIME, -- 取消时间
cancel_reason TEXT, -- 取消原因
order_remark TEXT, -- 订单备注
seller_remark TEXT, -- 卖家备注
buyer_remark TEXT, -- 买家备注
is_deleted INTEGER, -- 是否删除
delete_time DATETIME, -- 删除时间
order_ip TEXT, -- 下单IP
order_platform TEXT, -- 下单平台
order_device TEXT, -- 下单设备
order_app_version TEXT, -- APP版本号
-- order_amount
currency TEXT, -- 货币类型
exchange_rate REAL, -- 汇率
original_amount REAL, -- 原始金额
discount_amount REAL, -- 优惠金额
coupon_amount REAL, -- 优惠券金额
points_amount REAL, -- 积分抵扣金额
shipping_amount REAL, -- 运费
insurance_amount REAL, -- 保价费
tax_amount REAL, -- 税费
tariff_amount REAL, -- 关税
payment_amount REAL, -- 实付金额
commission_amount REAL, -- 佣金金额
platform_fee REAL, -- 平台费用
seller_income REAL, -- 卖家实收
payment_currency TEXT, -- 支付货币
payment_exchange_rate REAL, -- 支付汇率
-- user_info
user_id TEXT, -- 用户ID
user_name TEXT, -- 用户名
user_nickname TEXT, -- 用户昵称
user_level INTEGER, -- 用户等级
user_type INTEGER, -- 用户类型
register_time DATETIME, -- 注册时间
register_source TEXT, -- 注册来源
mobile TEXT, -- 手机号
mobile_area TEXT, -- 手机号区号
email TEXT, -- 邮箱
is_vip INTEGER, -- 是否VIP
vip_level INTEGER, -- VIP等级
vip_expire_time DATETIME, -- VIP过期时间
user_age INTEGER, -- 用户年龄
user_gender INTEGER, -- 用户性别
user_birthday DATE, -- 用户生日
user_avatar TEXT, -- 用户头像
user_province TEXT, -- 用户所在省
user_city TEXT, -- 用户所在市
user_district TEXT, -- 用户所在区
last_login_time DATETIME, -- 最后登录时间
last_login_ip TEXT, -- 最后登录IP
user_credit_score INTEGER, -- 用户信用分
total_order_count INTEGER, -- 历史订单数
total_order_amount REAL, -- 历史订单金额
-- product_info
product_id TEXT, -- 商品ID
product_code TEXT, -- 商品编码
product_name TEXT, -- 商品名称
product_short_name TEXT, -- 商品短名称
product_type INTEGER, -- 商品类型
product_status INTEGER, -- 商品状态
category_id TEXT, -- 类目ID
category_name TEXT, -- 类目名称
category_path TEXT, -- 类目路径
brand_id TEXT, -- 品牌ID
brand_name TEXT, -- 品牌名称
brand_english_name TEXT, -- 品牌英文名
seller_id TEXT, -- 卖家ID
seller_name TEXT, -- 卖家名称
seller_type INTEGER, -- 卖家类型
shop_id TEXT, -- 店铺ID
shop_name TEXT, -- 店铺名称
product_price REAL, -- 商品价格
market_price REAL, -- 市场价
cost_price REAL, -- 成本价
wholesale_price REAL, -- 批发价
product_quantity INTEGER, -- 商品数量
product_unit TEXT, -- 商品单位
product_weight REAL, -- 商品重量(克)
product_volume REAL, -- 商品体积(cm³)
product_spec TEXT, -- 商品规格
product_color TEXT, -- 商品颜色
product_size TEXT, -- 商品尺寸
product_material TEXT, -- 商品材质
product_origin TEXT, -- 商品产地
product_shelf_life INTEGER, -- 保质期(天)
manufacture_date DATE, -- 生产日期
expiry_date DATE, -- 过期日期
batch_number TEXT, -- 批次号
product_barcode TEXT, -- 商品条码
warehouse_id TEXT, -- 发货仓库ID
warehouse_name TEXT, -- 发货仓库名称
-- address_info
receiver_name TEXT, -- 收货人姓名
receiver_mobile TEXT, -- 收货人手机
receiver_tel TEXT, -- 收货人电话
receiver_email TEXT, -- 收货人邮箱
receiver_country TEXT, -- 国家
receiver_province TEXT, -- 省份
receiver_city TEXT, -- 城市
receiver_district TEXT, -- 区县
receiver_street TEXT, -- 街道
receiver_address TEXT, -- 详细地址
receiver_zip TEXT, -- 邮编
address_type INTEGER, -- 地址类型
is_default INTEGER, -- 是否默认地址
longitude REAL, -- 经度
latitude REAL, -- 纬度
address_label TEXT, -- 地址标签
-- shipping_info
shipping_type INTEGER, -- 配送方式
shipping_method TEXT, -- 配送方式名称
shipping_company TEXT, -- 快递公司
shipping_company_code TEXT, -- 快递公司编码
shipping_no TEXT, -- 快递单号
shipping_time DATETIME, -- 发货时间
shipping_remark TEXT, -- 发货备注
expect_receive_time DATETIME, -- 预计送达时间
receive_time DATETIME, -- 收货时间
sign_type INTEGER, -- 签收类型
shipping_status INTEGER, -- 物流状态
tracking_url TEXT, -- 物流跟踪URL
is_free_shipping INTEGER, -- 是否包邮
shipping_insurance REAL, -- 运费险金额
shipping_distance REAL, -- 配送距离
delivered_time DATETIME, -- 送达时间
delivery_staff_id TEXT, -- 配送员ID
delivery_staff_name TEXT, -- 配送员姓名
delivery_staff_mobile TEXT, -- 配送员电话
-- payment_info
payment_id TEXT, -- 支付ID
payment_no TEXT, -- 支付单号
payment_type INTEGER, -- 支付方式
payment_method TEXT, -- 支付方式名称
payment_status INTEGER, -- 支付状态
payment_platform TEXT, -- 支付平台
transaction_id TEXT, -- 交易流水号
payment_time DATETIME, -- 支付时间
payment_account TEXT, -- 支付账号
payment_bank TEXT, -- 支付银行
payment_card_type TEXT, -- 支付卡类型
payment_card_no TEXT, -- 支付卡号
payment_scene TEXT, -- 支付场景
payment_client_ip TEXT, -- 支付IP
payment_device TEXT, -- 支付设备
payment_remark TEXT, -- 支付备注
payment_voucher TEXT, -- 支付凭证
-- promotion_info
promotion_id TEXT, -- 活动ID
promotion_name TEXT, -- 活动名称
promotion_type INTEGER, -- 活动类型
promotion_desc TEXT, -- 活动描述
promotion_start_time DATETIME, -- 活动开始时间
promotion_end_time DATETIME, -- 活动结束时间
coupon_id TEXT, -- 优惠券ID
coupon_code TEXT, -- 优惠券码
coupon_type INTEGER, -- 优惠券类型
coupon_name TEXT, -- 优惠券名称
coupon_desc TEXT, -- 优惠券描述
points_used INTEGER, -- 使用积分
points_gained INTEGER, -- 获得积分
points_multiple REAL, -- 积分倍率
is_first_order INTEGER, -- 是否首单
is_new_customer INTEGER, -- 是否新客
marketing_channel TEXT, -- 营销渠道
marketing_source TEXT, -- 营销来源
referral_code TEXT, -- 推荐码
referral_user_id TEXT, -- 推荐人ID
-- after_sale_info
refund_id TEXT, -- 退款ID
refund_no TEXT, -- 退款单号
refund_type INTEGER, -- 退款类型
refund_status INTEGER, -- 退款状态
refund_reason TEXT, -- 退款原因
refund_desc TEXT, -- 退款描述
refund_time DATETIME, -- 退款时间
refund_amount REAL, -- 退款金额
return_shipping_no TEXT, -- 退货快递单号
return_shipping_company TEXT, -- 退货快递公司
return_shipping_time DATETIME, -- 退货时间
refund_evidence TEXT, -- 退款凭证
complaint_id TEXT, -- 投诉ID
complaint_type INTEGER, -- 投诉类型
complaint_status INTEGER, -- 投诉状态
complaint_content TEXT, -- 投诉内容
complaint_time DATETIME, -- 投诉时间
complaint_handle_time DATETIME, -- 投诉处理时间
complaint_handle_result TEXT, -- 投诉处理结果
evaluation_score INTEGER, -- 评价分数
evaluation_content TEXT, -- 评价内容
evaluation_time DATETIME, -- 评价时间
evaluation_reply TEXT, -- 评价回复
evaluation_reply_time DATETIME, -- 评价回复时间
evaluation_images TEXT, -- 评价图片
evaluation_videos TEXT, -- 评价视频
is_anonymous INTEGER, -- 是否匿名评价
-- invoice_info
invoice_type INTEGER, -- 发票类型
invoice_title TEXT, -- 发票抬头
invoice_content TEXT, -- 发票内容
tax_no TEXT, -- 税号
invoice_amount REAL, -- 发票金额
invoice_status INTEGER, -- 发票状态
invoice_time DATETIME, -- 开票时间
invoice_number TEXT, -- 发票号码
invoice_code TEXT, -- 发票代码
company_name TEXT, -- 单位名称
company_address TEXT, -- 单位地址
company_tel TEXT, -- 单位电话
company_bank TEXT, -- 开户银行
company_account TEXT, -- 银行账号
-- delivery_time_info
expect_delivery_time DATETIME, -- 期望配送时间
delivery_period_type INTEGER, -- 配送时段类型
delivery_period_start TEXT, -- 配送时段开始
delivery_period_end TEXT, -- 配送时段结束
delivery_priority INTEGER, -- 配送优先级
-- tag_info
order_tags TEXT, -- 订单标签
user_tags TEXT, -- 用户标签
product_tags TEXT, -- 商品标签
risk_level INTEGER, -- 风险等级
risk_tags TEXT, -- 风险标签
business_tags TEXT, -- 业务标签
-- commercial_info
gross_profit REAL, -- 毛利
gross_profit_rate REAL, -- 毛利率
settlement_amount REAL, -- 结算金额
settlement_time DATETIME, -- 结算时间
settlement_cycle INTEGER, -- 结算周期
settlement_status INTEGER, -- 结算状态
commission_rate REAL, -- 佣金比例
platform_service_fee REAL, -- 平台服务费
ad_cost REAL, -- 广告费用
promotion_cost REAL -- 推广费用
);
-- 插入示例数据
INSERT INTO order_wide_table (
-- 基础订单信息
order_id, order_no, order_type, order_status, create_time, order_source,
-- 订单金额
original_amount, payment_amount, shipping_amount,
-- 用户信息
user_id, user_name, user_level, mobile,
-- 商品信息
product_id, product_name, product_quantity, product_price,
-- 收货信息
receiver_name, receiver_mobile, receiver_address,
-- 物流信息
shipping_no, shipping_status,
-- 支付信息
payment_type, payment_status,
-- 营销信息
promotion_id, coupon_amount,
-- 发票信息
invoice_type, invoice_title
) VALUES
(
'ORD20240101001', 'NO20240101001', 1, 2, '2024-01-01 10:00:00', 'APP',
199.99, 188.88, 10.00,
'USER001', '张三', 2, '13800138000',
'PRD001', 'iPhone 15 手机壳', 2, 89.99,
'李四', '13900139000', '北京市朝阳区XX路XX号',
'SF123456789', 1,
1, 1,
'PROM001', 20.00,
1, '个人'
),
(
'ORD20240101002', 'NO20240101002', 1, 1, '2024-01-01 11:00:00', 'H5',
299.99, 279.99, 0.00,
'USER002', '王五', 3, '13700137000',
'PRD002', 'AirPods Pro 保护套', 1, 299.99,
'赵六', '13600136000', '上海市浦东新区XX路XX号',
'YT987654321', 2,
2, 2,
'PROM002', 10.00,
2, '上海科技有限公司'
),
(
'ORD20240101003', 'NO20240101003', 2, 3, '2024-01-01 12:00:00', 'WEB',
1999.99, 1899.99, 0.00,
'USER003', '陈七', 4, '13500135000',
'PRD003', 'MacBook Pro 电脑包', 1, 1999.99,
'孙八', '13400134000', '广州市天河区XX路XX号',
'JD123123123', 3,
3, 1,
'PROM003', 100.00,
1, '个人'
);
# 测试问题
## 场景一
学校管理系统,主要测试SQL助手的联合查询,条件查询和排序功能。
我们的数据库有三个表:学生表、课程表和成绩表。我们要测试SQL助手能否处理复杂的SQL查询,包括连接多个表,按照一定的条件筛选数据,以及对结果进行排序。
### Q1
查询所有学生的姓名,专业和成绩,按成绩降序排序
SQL:
```sql
SELECT students.student_name, students.major, scores.score
FROM students
JOIN scores ON students.student_id = scores.student_id
ORDER BY scores.score DESC;
```
### Q2
查询 "计算机科学" 专业的学生的平均成绩
SQL:
```sql
SELECT AVG(scores.score) as avg_score
FROM students
JOIN scores ON students.student_id = scores.student_id
WHERE students.major = '计算机科学';
```
### Q3
查询哪些学生在 "2023年春季" 学期的课程学分总和超过2学分
```sql
SELECT students.student_name
FROM students
JOIN scores ON students.student_id = scores.student_id
JOIN courses ON scores.course_id = courses.course_id
WHERE scores.semester = '2023年春季'
GROUP BY students.student_id
HAVING SUM(courses.credit) > 2;
```
## 场景二:电商系统,主要测试SQL助手的数据聚合和分组功能。
我们的数据库有三个表:用户表、商品表和订单表。我们要测试SQL助手能否处理复杂的SQL查询,包括对数据进行聚合和分组。
### Q1
查询每个用户的总订单数量
SQL:
```sql
SELECT users.user_name, COUNT(orders.order_id) as order_count
FROM users
JOIN orders ON users.user_id = orders.user_id
GROUP BY users.user_id;
```
### Q2
查询每种商品的总销售额
```sql
SELECT products.product_name, SUM(products.product_price * orders.quantity) as total_sales
FROM products
JOIN orders ON products.product_id = orders.product_id
GROUP BY products.product_id;
```
### Q3
查询2023年最受欢迎的商品(订单数量最多的商品)
```sql
SELECT products.product_name
FROM products
JOIN orders ON products.product_id = orders.product_id
WHERE YEAR(orders.order_date) = 2023
GROUP BY products.product_id
ORDER BY COUNT(orders.order_id) DESC
LIMIT 1;
```
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment