• 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似乎更灵活一些。
    欢迎大家批评指正

  • 相关阅读:
    我的航拍直升机 控制基站软件的编写历程(2.2)——Qt Creator 版本控制系统
    windows下QT开发环境建立方法
    QT 4.5 windows版本 安装问题 及 Junction 使用
    各种平台下编译qt工程
    华为面试题
    strcpy,strncpy,strlcpy,memcpy
    QT/E 更换字体问题
    Linux设备驱动编程中断处理
    oracle数据库连接池的使用
    Windows下QT的安装
  • 原文地址:https://www.cnblogs.com/ymy124/p/4028864.html
Copyright © 2020-2023  润新知