
























以下为 SQL 中聚合函数、分组查询及汇总的用法解析。需要相关数据可私信。
学习内容
示例代码与讲解
1. 聚合函数
SELECT MAX(invoice_total)
FROM invoices;
SELECT
MAX(invoice_total) AS highest,
MIN(invoice_total) AS lowest,
AVG(invoice_total) AS AVG,
SUM(invoice_total * 1.4) AS SUM,
COUNT(invoice_total) AS COUNT
FROM invoices;
SELECT
MAX(payment_date) AS highest,
MIN(payment_date) AS lowest,
COUNT(payment_date) AS COUNT
FROM invoices;
SELECT COUNT(*) AS number_invoices
FROM invoices;
SELECT
MAX(payment_date) AS highest,
MIN(payment_date) AS lowest,
COUNT(payment_date) AS COUNT
FROM invoices
WHERE payment_date >= '2018-01-01';
SELECT COUNT(DISTINCT client_id) AS number_client
FROM invoices;
2. GROUP BY
SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id;
SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
WHERE invoice_date >= '2019-07-01'
GROUP BY client_id
ORDER BY Total_sales DESC;
SELECT c.city, c.state, SUM(i.invoice_total) AS Total_sales
FROM invoices i
JOIN clients c USING (client_id)
GROUP BY c.state, c.city;
3. HAVING
SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id
HAVING Total_sales >= 800;
SELECT client_id, SUM(invoice_total) AS Total_sales, COUNT(*) AS number_invoices
FROM invoices
GROUP BY client_id
HAVING Total_sales >= 800 AND number_invoices > 5;
4. WITH ROLLUP
SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id WITH ROLLUP;
SELECT state, city, SUM(invoice_total) AS Total_sales
FROM invoices
JOIN clients c USING (client_id)
GROUP BY state, city WITH ROLLUP;
作业
1. 聚合与 UNION
SELECT
'First half of 2019' AS date_range,
SUM(invoice_total) AS Total_sales,
SUM(payment_total) AS Total_payments,
SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-01-01' AND '2019-06-30'
UNION
SELECT
'Second half of 2019' AS date_range,
SUM(invoice_total) AS Total_sales,
SUM(payment_total) AS Total_payments,
SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-07-01' AND '2019-12-31'
UNION
SELECT
'Total' AS date_range,
SUM(invoice_total) AS Total_sales,
SUM(payment_total) AS Total_payments,
SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-01-01' AND '2019-12-31';
2. 分组查询
SELECT date, pm.name AS payment_method, SUM(amount) AS Total_payments
FROM payments p
JOIN payment_methods pm ON p.payment_method =
pm.payment_method_id
GROUP BY date, pm.name
ORDER BY date;
3. HAVING 筛选
USE sql_store;
SELECT c.customer_id, SUM(oi.quantity * oi.unit_price) AS total_buy
FROM customers c
JOIN orders o USING (customer_id)
JOIN order_items oi USING (order_id)
WHERE c.state = 'VA'
GROUP BY c.customer_id
HAVING total_buy >= 100;
4. ROLLUP 汇总
USE sql_invoicing;
SELECT pm.name, SUM(p.amount) AS SUM
FROM payments p
JOIN payment_methods pm ON p.payment_method =
pm.payment_method_id
GROUP BY pm.name WITH ROLLUP;
总结
本次解析了聚合函数(COUNT、SUM 等)、GROUP BY 分组、HAVING 过滤及 ROLLUP 汇总。基于 sql_invoicing 和 sql_store 数据库。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。