SELECT t1.id, t1.name, t2.total_sales FROM customers t1 LEFT JOIN ( SELECT customer_id, SUM(sales) total_sales FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-06-30' GROUP BY customer_id ) t2 ON t1.id = t2.customer_id WHERE t1.city = 'New York' ORDER BY t2.total_sales DESC LIMIT 请提供比这条sql 更复杂的sql语句
时间: 2024-02-14 17:11:12 浏览: 27
以下是一个更复杂的 SQL 查询语句,它使用了多个子查询和窗口函数:
WITH
-- 定义一个子查询,获取销售额排名前10的产品
top_products AS (
SELECT
product_id,
SUM(sales) AS total_sales
FROM
orders
WHERE
order_date BETWEEN '2021-01-01' AND '2021-06-30'
GROUP BY
product_id
ORDER BY
total_sales DESC
LIMIT
10
),
-- 定义一个子查询,获取销售额排名前10的客户
top_customers AS (
SELECT
customer_id,
SUM(sales) AS total_sales
FROM
orders
WHERE
order_date BETWEEN '2021-01-01' AND '2021-06-30'
GROUP BY
customer_id
ORDER BY
total_sales DESC
LIMIT
10
),
-- 定义一个窗口函数,计算每个客户的销售额排名
customer_sales_rank AS (
SELECT
customer_id,
SUM(sales) AS total_sales,
ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) AS sales_rank
FROM
orders
WHERE
order_date BETWEEN '2021-01-01' AND '2021-06-30'
GROUP BY
customer_id
)
-- 最终查询,获取纽约市销售额排名前10的客户,以及他们购买的销售额排名前10的产品
SELECT
customers.id AS customer_id,
customers.name AS customer_name,
products.id AS product_id,
products.name AS product_name,
SUM(orders.sales) AS total_sales
FROM
orders
-- 连接顾客信息
INNER JOIN customers ON orders.customer_id = customers.id
-- 连接产品信息
INNER JOIN products ON orders.product_id = products.id
-- 仅查询纽约市的客户
WHERE customers.city = 'New York'
-- 仅查询销售额排名前10的客户
AND customers.id IN (SELECT customer_id FROM top_customers)
-- 仅查询销售额排名前10的产品
AND products.id IN (SELECT product_id FROM top_products)
-- 仅查询客户销售额排名前10的订单
AND customers.id IN (SELECT customer_id FROM customer_sales_rank WHERE sales_rank <= 10)
GROUP BY
customers.id,
customers.name,
products.id,
products.name
ORDER BY
customers.id,
total_sales DESC,
products.id;