美文网首页sql
SQL的GROUP BY用法小结

SQL的GROUP BY用法小结

作者: FoxLayla | 来源:发表于2019-03-26 14:39 被阅读0次

SQL的GROUP BY用法小结

利用聚合函数进行分组

使用COUNT()AVG()MIN()MAX()等聚合函数可实现对分组的过滤,聚合函数会分别对各组数据进行聚合。

以下面的orders表为例:

image

按照status列将订单分组并计算各组包含的订单条目数:

SELECT status, COUNT(status)
FROM orders
GROUP BY status;

查询结果为:

image

再以一个orderdetails表为例:

image

若希望计算每个订单中包含商品的总价,则有

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) AS amount
FROM orderdetails
GROUP BY orderNumber;

查询结果为:

image

利用表达式进行分组

GROUP BY语句中还可以使用函数或表达式来处理数据。

例如,从上述orders表和orderdetails表中查询每年订单总额:

SELECT
    YEAR(orderDate) AS year,
    SUM(quantityOrdered * priceEach) AS total
FROM orders 
INNER JOIN orderdetails USING (orderNumber)
GROUP BY YEAR(orderDate);

查询结果为:

image

使用HAVING语句对分组结果进行过滤

HAVING语句可以过滤出分组后满足特定条件的数据。

例如,查找出总额大于60000的订单

SELECT 
    orderNumber,
    SUM(quantityOrdered * priceEach) AS total
FROM orderdetails
GROUP BY orderNumber
HAVING total > 60000;

查询结果为:

image

注意

WHERE语句和HAVING语句虽然都可以对数据进行过滤,但用法是不同的,HAVING语句可以用于过滤分组,WHERE语句只能过滤行,不能过滤分组;因此WHERE语句应在GROUP BY之前使用。例如:

SELECT
    orderNumber,
    SUM(quantityOrdered * priceEach) AS total
FROM orderdetails
WHERE quantityOrdered > 50 AND priceEach > 100
GROUP BY orderNumber;

查询结果为:

image

WHERE语句中不能使用别名或者表达式,例如下列写法是不合法的:

SELECT
    orderNumber AS orderId
FROM orderdetails
WHERE orderId > 100100
GROUP BY orderNumber;

--> Error Code: 1054. Unknown column 'orderId' in 'where clause'

SELECT
    orderNumber,
    SUM(quantityOrdered * priceEach) AS total
FROM orderdetails
WHERE SUM(quantityOrdered * priceEach) > 60000
GROUP BY orderNumber;

--> Error Code: 1111. Invalid use of group function 0.000 sec

参考

相关文章

  • SQL的GROUP BY用法小结

    SQL的GROUP BY用法小结 利用聚合函数进行分组 使用COUNT()、AVG()、MIN()、MAX()等聚...

  • SQL中GROUP BY用法示例

    概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,...

  • SQL中GROUP BY用法示例

    概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,...

  • mysql 的 sql-mode

    查看当前sql-mode sql_mode常用值 ONLY_FULL_GROUP_BY: 对于GROUP BY聚合...

  • Java正则表达式

    matcher.group()用法 group是针对()来说的,group(0)就是指的整个串,group(1) ...

  • 第三章 SQL基础应用扩展

    第三章 SQL基础应用扩展 1.上节回顾 1.1 group by name 1.2 关于group by的sql...

  • mysql操作

    sql一些函数,复杂查询等基本操作 sql脚本 函数GROUP_CONCAT -GROUP_CONCAT 这个函数...

  • 7.27 mysql练习

    mysql练习题目: GROUP BY 语句 基本用法: GROUP BY 语句中的GROUP_CONCAT()函...

  • MySQL Group Replication 学习笔记

    group replication 小结 group replication作为mysql官方,在5.7版本阶段开...

  • group by 用法

    一、在用group by 时,select 中的字段要么出现在聚合函数中,要么出现在group by中,不能独立于...

网友评论

    本文标题:SQL的GROUP BY用法小结

    本文链接:https://www.haomeiwen.com/subject/jsbgvqtx.html