[WITH with_queries] SELECT select_list FROM table_expression [sort_specification]
示例查询
简单查询
查询所有订单信息
sql复制代码
SELECT O_ID, O_DATE, C_ID, I_ID, O_QUANTITY, O_TOTAL_PRICE FROM orders;
关联查询
查询客户的姓名和他们下的订单总数
sql复制代码
SELECT I_NAME, I_STOCK FROM items GROUP BY I_NAME, I_STOCK;
分组查询
查询每个商品的库存情况(按价格分类)
sql复制代码
SELECT c.C_NAME, COUNT(o.O_ID) AS order_count FROM customers c JOIN orders o ON c.C_ID = o.C_ID GROUP BY c.C_NAME;
子查询
查询订单金额大于 500 的订单信息
sql复制代码
SELECT * FROM orders WHERE O_TOTAL_PRICE > ( SELECT AVG(O_TOTAL_PRICE) FROM orders);
with子句
计算每个客户的总消费金额,并筛选出消费金额最高的前5名客户
sql复制代码
WITH customer_total_amount AS (
SELECT
c.C_NAME,
SUM(o.O_TOTAL_PRICE) AS total_amount
FROM customers c
JOIN orders o ON c.C_ID = o.C_ID
GROUP BY c.C_NAME
)
SELECT *
FROM customer_total_amount
ORDER BY total_amount DESC
LIMIT 5;
CREATE VIEW sales_summary AS
SELECT
DATE(o.O_DATE) AS order_date,
COUNT(o.O_ID) AS order_count,
SUM(o.O_TOTAL_PRICE) AS total_sales
FROM orders o
GROUP BY DATE(o.O_DATE);
库存预警视图
功能:监控库存量低于 10 的商品
sql复制代码
CREATE VIEW low_stock_items AS
SELECT
i.I_ID,
i.I_NAME,
i.I_STOCK
FROM items i
WHERE i.I_STOCK < 60;
客户消费记录视图
功能:展示客户的订单历史和总消费金额
sql复制代码
CREATE VIEW customer_purchase_history AS
SELECT
c.C_NAME,
o.O_DATE,
i.I_NAME,
o.O_QUANTITY,
o.O_TOTAL_PRICE
FROM customers c
JOIN orders o ON c.C_ID = o.C_ID
JOIN items i ON o.I_ID = i.I_ID;
视图查询
查询销售统计视图
sql复制代码
SELECT * FROM sales_summary WHERE order_date = '2023-10-01';
查询库存预警视图
sql复制代码
SELECT * FROM low_stock_items;
查询Alice Smith的订单历史和总消费金额
sql复制代码
SELECT * FROM customer_purchase_history WHERE C_NAME = 'Alice Smith';
视图信息查询
通过使用select语句查询sys_views视图查看相关索引索引
mysql复制代码
select * from sys_views where schemaname='public';
CREATE OR REPLACE FUNCTION calculate_discount_amount(_o_id INT)
RETURNS DECIMAL(8,2) AS $$
DECLARE
total_price DECIMAL(8,2);
BEGIN
-- 从 orders 表中获取订单的总价
SELECT O_TOTAL_PRICE INTO total_price
FROM orders
WHERE O_ID = _o_id;
-- 假设折扣率为 10%
RETURN total_price * 0.10;
END$$
LANGUAGE plpgsql;
查看订单ID=1的原价
sql复制代码
SELECT * from orders where o_id=1;
查看订单 ID=1 的折扣金额
sql复制代码
SELECT calculate_discount_amount(1) AS discount_amount;
\set SQLTERM /
CREATE TRIGGER update_stock_AFTER_INSERT
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE items
SET I_STOCK = I_STOCK - NEW.O_QUANTITY
WHERE I_ID = NEW.I_ID;
END;
/
查看当前库存情况
sql复制代码
select * from items;
商品编号为1的库存为50
往order订单表中插入一条数据
sql复制代码
INSERT INTO orders VALUES('11','2023-11-01', 1, 1, 1, 200),