SELECT users.username, SUM(orders.order_total) AS total_order_amount, SUM(orders.order_total) / total_sum_order_total.sum_order_total * 100 AS order_percent FROM users INNER JOIN orders ON users.user_id = orders.user_id CROSS JOIN (SELECT SUM(order_total) AS sum_order_total FROM orders) AS total_sum_order_total GROUP BY users.user_id ORDER BY order_percent DESC; 为什么要用到cross join
时间: 2023-06-17 17:06:22 浏览: 145
在这个 SQL 查询语句中,CROSS JOIN 被用来创建一个子查询,该子查询只返回一个行,其中包含了所有订单的 order_total 的总和。这个子查询被命名为 total_sum_order_total,它被用来计算所有订单总金额的百分比。
在 SELECT 子句中,我们可以使用 total_sum_order_total 子查询中的 sum_order_total 列来计算每个用户的订单总金额与所有订单总金额的比例。由于只有一个行,我们使用 CROSS JOIN 来将它与 users 表和 orders 表关联,以计算所有订单的总金额。这就是为什么要使用 CROSS JOIN 的原因。
相关问题
使用 mysql 保存数据,实现超市日常管理中以下业务。" 一、建立以下数据表并填充数据+登录+' 用户表: users _学号后四位+' 列名: id _学号后四位用户名 name 学号后四位密码: pwd _学号后四位*产品表: products _学号后四位. 列名: id _学号后四位编号 num 学号后四位名称 name 学号后四位单价 price 学号后四位折扣 discount _学号后四位 订单表: orders _学号后四位. 列名: id _学号后四位编号 num 学号后四位货品数量 count 学号后四位金额 arnount 学号后四位. 二、实现以下菜单并实现业务0用户登录 1查看所有产品信息。"2查找商品(用户输入商品名称,查看价格和折扣):- 3添加商品(需要程序生成编号),- 4修改商品价格和折扣(折扣为0.1-0.99之间):. 5删除商品(根据编号): 6查看所有订单:+ 7.订单统计(显示总销售额和货品数量): 8.商品结算。,每个声明的变量加上_0314结尾,并且所有自定义的变量加上_0314,例如a_0314=1
好的,下面是使用 Python 和 MySQL 实现超市日常管理的代码:
```python
import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', user='root', password='123456', database='supermarket')
cur = conn.cursor()
# 用户登录
def login():
username = input("请输入用户名:")
pwd = input("请输入密码:")
sql = "SELECT * FROM users WHERE name=%s AND pwd=%s"
cur.execute(sql, (username, pwd))
result = cur.fetchone()
if result:
print("登录成功!")
else:
print("用户名或密码错误!")
# 查看所有产品信息
def view_products():
sql = "SELECT * FROM products"
cur.execute(sql)
result = cur.fetchall()
for row in result:
print(row)
# 查找商品
def search_product():
product_name = input("请输入商品名称:")
sql = "SELECT price, discount FROM products WHERE name=%s"
cur.execute(sql, product_name)
result = cur.fetchone()
if result:
print("价格:", result[0], "折扣:", result[1])
else:
print("没有找到该商品!")
# 添加商品
def add_product():
product_name = input("请输入商品名称:")
price_0314 = input("请输入单价:")
discount_0314 = input("请输入折扣:")
num_0314 = 'p' + str(len(product_name)) + product_name[-4:] # 自动生成编号
sql = "INSERT INTO products (id, num, name, price, discount) VALUES (%s, %s, %s, %s, %s)"
cur.execute(sql, (num_0314, num_0314, product_name, price_0314, discount_0314))
conn.commit()
print("添加成功!")
# 修改商品价格和折扣
def modify_product():
num_0314 = input("请输入要修改的商品编号:")
price_0314 = input("请输入新的单价:")
discount_0314 = input("请输入新的折扣:")
sql = "UPDATE products SET price=%s, discount=%s WHERE num=%s"
cur.execute(sql, (price_0314, discount_0314, num_0314))
conn.commit()
print("修改成功!")
# 删除商品
def delete_product():
num_0314 = input("请输入要删除的商品编号:")
sql = "DELETE FROM products WHERE num=%s"
cur.execute(sql, num_0314)
conn.commit()
print("删除成功!")
# 查看所有订单
def view_orders():
sql = "SELECT * FROM orders"
cur.execute(sql)
result = cur.fetchall()
for row in result:
print(row)
# 订单统计
def order_statistics():
sql = "SELECT SUM(count), SUM(amount) FROM orders"
cur.execute(sql)
result = cur.fetchone()
print("总销售额:", result[1], "货品数量:", result[0])
# 商品结算
def checkout():
total_amount = 0
while True:
product_num = input("请输入商品编号(输入0结束结算):")
if product_num == '0':
break
count_0314 = int(input("请输入货品数量:"))
sql = "SELECT price, discount FROM products WHERE num=%s"
cur.execute(sql, product_num)
result = cur.fetchone()
if result:
price_0314, discount_0314 = result
amount_0314 = price_0314 * discount_0314 * count_0314
total_amount += amount_0314
sql = "INSERT INTO orders (id, num, count, amount) VALUES (%s, %s, %s, %s)"
cur.execute(sql, ('o' + str(len(str(total_amount))) + str(total_amount)[-4:], product_num, count_0314, amount_0314))
conn.commit()
else:
print("没有找到该商品!")
print("总金额为:", total_amount)
# 菜单
while True:
print("=====超市日常管理系统=====")
print("0. 用户登录")
print("1. 查看所有产品信息")
print("2. 查找商品")
print("3. 添加商品")
print("4. 修改商品价格和折扣")
print("5. 删除商品")
print("6. 查看所有订单")
print("7. 订单统计")
print("8. 商品结算")
print("==========================")
choice_0314 = input("请输入您要进行的操作:")
if choice_0314 == '0':
login()
elif choice_0314 == '1':
view_products()
elif choice_0314 == '2':
search_product()
elif choice_0314 == '3':
add_product()
elif choice_0314 == '4':
modify_product()
elif choice_0314 == '5':
delete_product()
elif choice_0314 == '6':
view_orders()
elif choice_0314 == '7':
order_statistics()
elif choice_0314 == '8':
checkout()
else:
print("输入有误,请重新输入!")
# 关闭连接
cur.close()
conn.close()
```
注意事项:
1. 需要先创建数据库和数据表,并填充数据,详情请见下面的 SQL 语句。
2. 在 MySQL 中,表名不区分大小写,但列名区分大小写,因此在编写 SQL 语句时需要注意。
3. 为每个变量加上 _0314 后缀是为了避免与 Python 内置函数或关键字重名。
下面是创建数据库和数据表的 SQL 语句:
```sql
-- 创建数据库
CREATE DATABASE supermarket;
-- 创建用户表
CREATE TABLE users (
id VARCHAR(10) NOT NULL,
name VARCHAR(10) NOT NULL,
pwd VARCHAR(10) NOT NULL,
PRIMARY KEY (id)
);
-- 插入用户数据
INSERT INTO users (id, name, pwd) VALUES ('u0314', '0314', '0314');
-- 创建产品表
CREATE TABLE products (
id VARCHAR(10) NOT NULL,
num VARCHAR(10) NOT NULL,
name VARCHAR(20) NOT NULL,
price FLOAT NOT NULL,
discount FLOAT NOT NULL,
PRIMARY KEY (id)
);
-- 插入产品数据
INSERT INTO products (id, num, name, price, discount) VALUES ('p5milk', 'p5milk', '牛奶', 2.5, 0.9);
INSERT INTO products (id, num, name, price, discount) VALUES ('p6bread', 'p6bread', '面包', 1.5, 0.8);
INSERT INTO products (id, num, name, price, discount) VALUES ('p8apple', 'p8apple', '苹果', 5, 0.95);
-- 创建订单表
CREATE TABLE orders (
id VARCHAR(10) NOT NULL,
num VARCHAR(10) NOT NULL,
count INT NOT NULL,
amount FLOAT NOT NULL,
PRIMARY KEY (id)
);
```
在运行代码前,需要先在 MySQL 中创建数据库和数据表,并填充数据。
阅读全文