zoukankan      html  css  js  c++  java
  • oracle 中GROUP BY的用法

    转自:http://blog.csdn.net/basenet855x/article/details/6694150

    问题:

    select item.itemnum,item.in1,item.in4,inventory.location from item,inventory

    where item.itemnum=inventory.itemnum

    and inventory.location='DYB'

    and item.in1='D/MTD/MRM'

    GROUP BY ITEM.ITEMNUM

    提示错误是NOT A GROUP BY EXPRESSION

    答案:

    GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想

    你用了GROUP BY 按 ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示

    A B

    1 abc

    1 bcd

    1 asdfg

    select A,B from table group by A

    你说这样查出来是什么结果,

    A B

        abc

    1 bcd

        asdfg

    右边3条如何变成一条,所以需要用到聚合函数,比如

    select A,count(B) 数量 from table group by A

    这样的结果就是

    A 数量

    1 3

    group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面

    讨论:mysql和oracle对group by的解析是不一样的!

    mysql:

    SELECT s.SName, sc.COUNT(CID) c
    FROM SC sc JOIN S s ON sc.SID = s. SID
    GROUP BY s.SID
    HAVING c = ( SELECT COUNT(*) FROM C )

    oracle:

    SELECT s.SID, s.SName, sc.COUNT(CID) c
    FROM   SC sc JOIN S s ON sc.SID = s.SID
    GROUP BY s.SID, s.SName
    HAVING c = ( SELECT COUNT(*) FROM C )


    大家可以看到区别了,mysql对group by子句的限制有所放宽,除了集合函数之外的被查询字段也可以不参与分组。相反oracle则是严格要求,所以感觉mysql似乎更灵活一些。
    欢迎大家批评指正

  • 相关阅读:
    jQuery 删除元素
    jQuery 添加元素
    jQuery 捕获
    jQuery 链
    jQuery Callback
    jQuery 停止动画
    jQuery 动画
    jQuery 滑动
    jQuery 淡入淡出
    SP2010开发和VS2010专家"食谱"--第七章节--使用客户端对象模型
  • 原文地址:https://www.cnblogs.com/ymy124/p/4028864.html
Copyright © 2011-2022 走看看