GROUP BY用于按指定列分组数据,配合聚合函数(如SUM、COUNT、AVG等)对每组数据进行统计;SELECT中非聚合列必须出现在GROUP BY中;多字段分组可实现更细粒度分析;WHERE在分组前过滤行,HAVING在分组后基于聚合结果过滤组。
SQL中的
GROUP BY
COUNT
SUM
AVG
MIN
MAX
要使用
GROUP BY
假设我们有一个
sales_records
product_category
sale_amount
SELECT product_category, SUM(sale_amount) AS total_sales_amount FROM sales_records GROUP BY product_category;
这里,
SELECT product_category, SUM(sale_amount)
FROM sales_records
GROUP BY product_category
product_category
SUM(sale_amount)
我个人觉得,理解
GROUP BY
GROUP BY
SUM(sale_amount)
GROUP BY
GROUP BY
说到
GROUP BY
COUNT()
COUNT(*)
COUNT(column_name)
column_name
-- 统计每个产品类别的销售记录数量 SELECT product_category, COUNT(*) AS number_of_sales FROM sales_records GROUP BY product_category;
SUM()
-- 统计每个产品类别的总销售额 (上面已经给过例子)
AVG()
-- 计算每个产品类别的平均销售额 SELECT product_category, AVG(sale_amount) AS average_sale_amount FROM sales_records GROUP BY product_category;
MIN()
-- 找出每个产品类别的最低销售额 SELECT product_category, MIN(sale_amount) AS min_sale_amount FROM sales_records GROUP BY product_category;
MAX()
-- 找出每个产品类别的最高销售额 SELECT product_category, MAX(sale_amount) AS max_sale_amount FROM sales_records GROUP BY product_category;
值得注意的是,如果你在
SELECT
GROUP BY
SELECT product_category, sale_date
GROUP BY product_category
sale_date
SELECT
GROUP BY
有时候,我们不仅仅想按一个维度来分组,而是希望从更细致的角度去分析数据。比如,我想知道每个产品类别在不同销售区域(
sales_region
SELECT product_category, sales_region, SUM(sale_amount) AS total_sales_amount FROM sales_records GROUP BY product_category, sales_region;
这个查询会创建更细粒度的分组。它会把“电子产品”在“北方区域”的销售记录归为一组,“电子产品”在“南方区域”的销售记录归为另一组,以此类推。每个
product_category
sales_region
我发现,多字段分组在做数据透视时特别有用。它能一下子把数据的层级感拉出来,从宏观到微观,洞察力瞬间提升。比如,你可能发现某个产品类别在整体上表现不错,但一细分到区域,就发现它在某个特定区域的销售额异常低,这就能帮你快速定位问题。这种分层分析的能力,是
GROUP BY
HAVING
WHERE
这是
GROUP BY
WHERE
HAVING
WHERE
WHERE
-- 只统计销售额大于100的产品记录,然后再按产品类别分组 SELECT product_category, SUM(sale_amount) AS total_sales_amount FROM sales_records WHERE sale_amount > 100 -- 过滤掉单笔销售额小于等于100的记录 GROUP BY product_category;
在这个例子中,
WHERE sale_amount > 100
GROUP BY product_category
HAVING
HAVING
-- 统计每个产品类别的总销售额,但只显示总销售额超过5000的类别 SELECT product_category, SUM(sale_amount) AS total_sales_amount FROM sales_records GROUP BY product_category HAVING SUM(sale_amount) > 5000; -- 过滤掉总销售额小于等于5000的类别
这里,
GROUP BY product_category
HAVING SUM(sale_amount) > 5000
我经常会这样去想它们的执行顺序:数据库会先从
FROM
WHERE
GROUP BY
HAVING
WHERE
HAVING
以上就是sql怎样用GROUPBY对数据进行简单分组 sql分组查询的基础语句用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号