zoukankan      html  css  js  c++  java
  • 10 分组数据

    10.1 创建分组

    分组是在SELECT语句的GROUP BY子句中建立的。
    例如:

    SELECT vend_id, COUNT(*) AS num_prods
    FROM Products
    GROUP BY vend_id;

    输出结果是这个样子:

    上面的SELECT语句指定了两个列, vend_id包含产品供应商的ID, num_prods为计算字段(用COUNT(*)函数建立)。 GROUP BY子句指示MySQL按vend_id排序并分组数据。这导致对每个vend_id而不是整个表 计算num_prods一次。从输出中可以看到,供应商1001有3个产品,供应商 1002有2个产品,供应商1003有7个产品,而供应商1005有2个产品。
    GROUP BY子句指示MySQL分组数据,然后对每个组而不是 整个结果集进行聚集。
    注意:GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前。

    10.2 过滤分组

    HAVING非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是 WHERE过滤行,而HAVING过滤分组。

    例如:

    SELECT cust_id, count(*) AS orders
    FROM Orders
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;

    输出结果是:

    这条SELECT语句的前3行类似于上面的语句。最后一行增加了 HAVING子句,它过滤COUNT(*) >=2(两个以上的订单)的那些分组。

    HAVING和WHERE的差别 :
    WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。

    看下面的例子:

    SELECT cust_id, COUNT(*) AS num_prods
    FROM Products
    WHERE prod_price >= 10
    GROUP BY vend_id
    HAVING COUNT(*) >= 2;

    输出结果:

    WHERE子句过滤所有prod_price至少为10的 行。然后按vend_id分组数据, HAVING子句过滤计数为2或2以上的分组。如果没有WHERE子句,将会多检索出两行(供应商1002,销售的所有产品价格都在10以下;供应商1001,销售3个产品,但只有一个产品的价格大于等于10


    10.3 分组和排序

    一般在使用GROUP BY子句时,应该也给 ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。
    例如:

    SELECT order_num, SUM(quantity * item_price ) AS ordertotal
    FROM Ordertimes
    GROUP BY order_num
    HAVING SUM(quantity * item_price ) >= 50;

    结果是:

    为按总计订单价格排序输出,需要添加ORDER BY子句,如下所示:

    SELECT order_num, SUM(quantity * item_price ) AS ordertotal
    FROM Ordertimes
    GROUP BY order_num
    HAVING SUM(quantity * item_price ) >= 50
    ORDER BY ordertotal;

    输出结果是:

    GROUP BY子句用来按订单号(order_num列) 分组数据,以便SUM(*)函数能够返回总计订单价格。 HAVING子句过滤数据,使得只返回总计订单价格大于等于50的订单。最后, 用ORDERBY子句排序输出。

    10.4 SELECT子句顺序


    下面回顾一下SELECT中子句的顺序:


    SELECT子句及其顺序





  • 相关阅读:
    SSL延迟有多大?(转)
    Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)
    lvs、haproxy、nginx 负载均衡的比较分析(转)
    入木三分学网络第一篇--VRRP协议详解第一篇(转)
    从一个开发的角度看负载均衡和LVS(转)
    四层和七层负载均衡的区别(转)
    geo实现方案
    HTTP API 设计指南(转)
    app后端设计(0)--总目录(转)
    Django接收自定义http header(转)
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10154041.html
Copyright © 2011-2022 走看看