• Sql Server 分组数据


    /*
    分组数据
    */

    select vend_id, count(*) as NUM_PRODS from products GROUP BY vend_id; --分组后 count函数会对每个组(GROUP BY 分出的每个组) 而不是整个结果进行聚集。

    -- 有可能的执行顺序(但不一定正确) from select group by count

    select prod_id prod_name from Products group by prod_name;--除聚集计算语句之外 select 的每一列都需要在 group by 中给出。 如此语句虽然编译时不报错,但是执行不会成功!

    -- GROUP BY 必须出现在 WHERE 语句之后 ORDER BY 语句之前! tip: ORDER BY 必须在select 末尾。 因为 ORDER BY 是对最终结果进行排序 执行顺序也是最后一名。


    select prod_id from Products GROUP BY ALL prod_id;

    --有些筛选条件 WHERE 不能做到。 事实上 WHERE 没有分组概念。 WHERE 筛选的都是行!
    -- WHERE 过滤行 ! HAVING 过滤分组 ! 如果要按照分组进行筛选过滤 可以使用 HAVING!
    -- 使用having时应该结合group by 进行使用 而where 用于标准的行级过滤。


    --如下 可以看出 where 在此并不起作用。 需要使用 having 因为 如下过滤是基于分组聚集值(分组后的数据进行过滤)进行过滤,而不是根据特定的行进行过滤。

    select cust_id , COUNT(*) as num_order from Orders group by cust_id having COUNT(*)>=2; -- 得出: 按照cust_id(顾客编号)进行分组 得出每组所拥有的行,并且行数大于等于2

    select vend_id ,avg(prod_price) as num_price from Products Group by vend_id having AVG(prod_price)>=5 ; --得出: 按照vend_id(出售编号)进行分组 得出每组的平均值,并且平均值大于等于5.



    --如下 :这是一套可以一起执行进行对比一下 看规律


    SELECT VEND_ID ,COUNT(*) FROM Products WHERE prod_price>4 GROUP BY vend_id HAVING COUNT(*)>=2; --先找到价格大于4的 之后再分组 在找行大于2 但是请注意 这个是按 vend_id进行分组的


    SELECT VEND_ID, prod_price, COUNT(*) FROM Products GROUP BY vend_id , prod_price --按照 id和price 分组 之后显示出行 总共6组


    SELECT VEND_ID, prod_price FROM Products --查找全部


    SELECT VEND_ID, prod_price FROM Products where prod_price>4; -- 查找出价格大于4的 有6条

    SELECT VEND_ID, prod_price, COUNT(*) FROM Products GROUP BY vend_id , prod_price HAVING prod_price>4 AND COUNT(*)>=2; --而这个是按照 prod_price进行分组的。 为什么? 因为(prod_id)A 可以有 多个(prod_price)B。 但是(prod_price)B 只能有一个 A(prod_id) 所以是按照prod_price进行分组。 按prod_price分组后 行数还需要高于2。


    --如上 :这是一套可以一起执行进行对比一下 看规律


    select COUNT(*) from Products order by COUNT(*); -- order by 非选择列也可以使用


    -- GROUP BY 一般用于 在组计算聚集时使用 (按照分组去计算聚集时)

  • 相关阅读:
    在java中获取URL的域名或IP与端口
    解决notepad++64位没有plugin manager的问题
    统一认证需要解决的问题
    搭建Maven私服
    Update openssh7.9 on centos6
    python下载想听的有声书,让喜马拉雅收费,我是程序员!
    golang ---获取内存信息
    websocket学习
    go 读取BMP文件头二进制读取
    go 计算文件行
  • 原文地址:https://www.cnblogs.com/java-263/p/13547663.html
Copyright © 2020-2023  润新知