本人MySQL5.7版本
表结构
假设有一个名为 order_summary 的表,其字段如下:
order_id (INT): 订单的唯一标识符
customer_id (VARCHAR): 顾客的唯一标识符
order_date (DATETIME): 订单创建时间
total_amount (DECIMAL): 订单总金额
payment_status (ENUM): 付款状态(如 'Paid', 'Pending', 'Failed')
category (VARCHAR): 产品类别
shipping_type (VARCHAR): 运输方式
SQL 示例和解释
1. 聚合函数
GROUP_CONCAT()
SELECT GROUP_CONCAT(order_id) FROM order_summary GROUP BY customer_id LIMIT 1000;
解释: 将每个顾客的订单 ID 连接成一个字符串,并限制结果为 1000 条。
COUNT(DISTINCT)
SELECT total_amount, COUNT(DISTINCT customer_id) AS unique_customers FROM order_summary GROUP BY total_amount;
解释: 统计每个订单总金额对应的不同顾客数量。
SUM()
SELECT customer_id, SUM(IF(total_amount > 0, total_amount, 0)) AS total_spent FROM order_summary GROUP BY customer_id;
解释: 计算每个顾客的订单总金额,仅对正值进行求和。
2. 字符串函数
FIND_IN_SET()
SELECT * FROM order_summary WHERE FIND_IN_SET(customer_id, 'C001,C002,C003,C004') > 0;
解释: 查找 customer_id 在指定列表中的记录。
SUBSTRING_INDEX()
SELECT customer_id, SUBSTRING_INDEX(total_amount, '.', 1) AS integer_part FROM order_summary;
解释: 提取 total_amount 中小数点前的部分。
SUBSTRING()
SELECT SUBSTRING('Hello World', 1, 5) AS short_text;
解释: 从字符串中提取前五个字符。
3. 日期和时间函数
DATE_FORMAT()
SELECT DATE_FORMAT(order_date, '%Y年-%m月-%d日') AS formatted_date FROM order_summary;
解释: 将 order_date 格式化为“年-月-日”的形式。
DATEDIFF()
SELECT DATEDIFF(NOW(), order_date) AS days_since_order FROM order_summary WHERE order_id = 1820647545201496064;
解释: 计算订单创建时间与当前时间之间的天数差。
4. 条件函数
IF()
SELECT customer_id, IF(total_amount > 100, 'High', 'Low') AS amount_level FROM order_summary;
解释: 根据 total_amount 的值将其分类为“High”或“Low”。
CASE
SELECT customer_id,
CASE
WHEN total_amount > 100 THEN 'High'
WHEN total_amount BETWEEN 50 AND 100 THEN 'Medium'
ELSE 'Low'
END AS amount_level
FROM order_summary;
解释: 根据 total_amount 的不同范围进行分类。
5. 集合函数
UNION ALL
SELECT customer_id, total_amount, shipping_type FROM order_summary WHERE shipping_type = 'Express'
UNION ALL
SELECT customer_id, total_amount, shipping_type FROM order_summary WHERE shipping_type = 'Standard';
解释: 获取使用快速和标准运输方式的顾客记录,并合并结果。
6. JSON 函数
JSON_ARRAY()
SELECT JSON_ARRAY(1, 2, 3) AS json_array;
解释: 生成一个包含数字 1、2、3 的 JSON 数组。
JSON_OBJECT()
SELECT JSON_OBJECT('customer_id', customer_id, 'total_amount', total_amount) AS json_result FROM order_summary;
解释: 生成一个 JSON 对象,其中包含 customer_id 和 total_amount 的键值对。
以上是关于 order_summary 表及其字段的 SQL 示例和解释。通过这些示例,我们可以更好地理解 MySQL 的强大功能,并在实际项目中灵活运用。
如有更多问题或想法,欢迎在评论区讨论!