面试题答案
一键面试切分策略
可以采用按时间(order_date)进行范围切分,因为订单数据通常与时间有较强的关联性,且千万级数据按月份切分,每个月的数据量相对均衡,便于管理和查询。
切分后的SQL查询语句示例
假设要统计2023年每个月不同用户的订单总金额,以MySQL为例:
-- 1月
SELECT user_id, SUM(order_amount) AS total_amount
FROM orders
WHERE YEAR(order_date) = 2023 AND MONTH(order_date) = 1
GROUP BY user_id;
-- 2月
SELECT user_id, SUM(order_amount) AS total_amount
FROM orders
WHERE YEAR(order_date) = 2023 AND MONTH(order_date) = 2
GROUP BY user_id;
-- 以此类推,直到12月
如果是其他数据库,函数的使用方式可能略有不同,但基本思路一致。例如在Oracle中,YEAR()
函数用EXTRACT(YEAR FROM order_date)
替代,MONTH()
函数用EXTRACT(MONTH FROM order_date)
替代。
-- 1月(Oracle示例)
SELECT user_id, SUM(order_amount) AS total_amount
FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2023 AND EXTRACT(MONTH FROM order_date) = 1
GROUP BY user_id;