8个必知必会的SQL小技巧!
|
admin
2024年1月30日 17:56
本文热度 2997
|
这次给大家带来8个必知必会的SQL小技巧,包括窗口函数、子查询、通用表格表达式等等,一起来看看吧!
1. 窗口函数(Window Functions)
窗口函数在分析和汇总数据时非常有用。下面例子展示如何计算每个类别的销售额排名:
SELECT category, product_name, sales, RANK() OVER (PARTITION BY category ORDER BY sales DESC) as sales_rankFROM products;
子查询可以嵌套在主查询中,增强查询的灵活性。以下是一个使用子查询查找平均销售额的示例:
SELECT product_name, salesFROM productsWHERE sales > (SELECT AVG(sales) FROM products);
不过要慎用,影响查询性能。
通用表格表达式(CTE)可用于更清晰、模块化地构建复杂的查询。以下是一个使用CTE找出销售额最高的产品的示例:
WITH ranked_products AS (SELECT product_name, sales, RANK() OVER (ORDER BY sales DESC) as sales_rank FROM products)SELECT product_name, salesFROM ranked_productsWHERE sales_rank = 1;
使用联结是优化查询的重要手段之一。以下例子展示了如何使用INNER JOIN联结两个表格:
SELECT orders.order_id, customers.customer_nameFROM ordersINNER JOIN customers ON orders.customer_id = customers.customer_id;
除了INNER JOIN,还有LEFT JOIN、FULL JOIN、SEMI JOIN、ANTI JOIN等等。后两个如何使用,可以查看下方链接哦。
SQL | left semi join与left anti join
5. 条件聚合(Conditional Aggregation)
通过条件聚合,你可以在聚合函数中使用条件语句。以下例子演示如何计算不同产品类别的平均销售额,但仅考虑销售额大于1000的记录:
SELECT category, AVG(CASE WHEN sales > 1000 THEN sales ELSE NULL END) as avg_salesFROM productsGROUP BY category;
也叫数据透视。使用PIVOT关键字,你可以将行数据转换为列。下面展示了如何将销售额按月份进行窜升:
SELECT *FROM (SELECT month, category, sales FROM monthly_sales) AS source_tablePIVOT (SUM(sales) FOR month IN ('Jan', 'Feb', 'Mar')) AS pivot_table;
处理日期和时间数据时,以下是一个计算一周内订单数量的例子:
SELECT DATE_TRUNC('week', order_date) AS week_start, COUNT(*) AS order_countFROM ordersWHERE order_date >= CURRENT_DATE - INTERVAL '1 week'GROUP BY week_start;
使用UNION操作符,你可以合并多个查询结果。下面例子展示了如何合并两个类别的产品销售信息:
SELECT product_name, salesFROM products_1WHERE category = 'Electronics'UNIONSELECT product_name, salesFROM products_2WHERE category = 'Appliances';
不过,UNION慎用,它自带去重功能。在不需要去重时,可以考虑用UNION ALL。
该文章在 2024/1/31 12:32:04 编辑过