今天需要这样一句sql:先用group by进行分组,然后利用聚合函数count 或者sum进行计算,并显示其它的辅助信息。在MySQL环境中,我模拟如下环境:CREATE TABLE `room` ( `rid` varchar(5) default NULL, `rname` varchar(5) default NULL, `pid` int(11) default NULL, `seq` int(11) NOT NULL auto_increment, PRIMARY KEY (`seq`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
房间表,seq房间入住序号(主键),rname为房间名,这里不考虑第三范式情景:人住房间,统计某个房间某个人住的次数 用户表,客人的信息
CREATE TABLE `user1` ( `ID` int(11) NOT NULL auto_increment, `USERNAME` varchar(50) default "", `PASSWORD` varchar(50) default "", PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk
Mysql中语句如下:select count(u.username),r.rname,r.rid,r.pidfrom room r,user1 uwhere r.pid=u.id group by r.rid,r.pid这里r.rname并没有出现在group by子句、聚合函数中,但是MYSQL中仍然能够执行、列出数据。
但是,在Oracle中,却不能!!!!
Oracle环境中:/* --显示:Ora-00979 not a ORDER BY expression --因为: order by 后边的c.channel_code不在ORDER BY子句中 select count(c.channel_name),m.media_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name order by c.channel_code --显示:Ora-00979 not a GROUP BY expression--因为:group by 或者聚合函数中没有包含c.channel_name select count(c.channel_name),m.media_name,c.channel_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name */--通过:select count(c.channel_name),m.media_name from channel c,media m where c.media_code = m.media_code group by m.media_name--正常select count(c.channel_name),m.media_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name --正常select count(c.channel_code),m.media_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name Oracle 10g学习之闪回数据库Oracle Streams存储过程中的一些参数相关资讯 mysql oracle
- [INS-32052] Oracle基目录和Oracle (07/22/2014 07:41:41)
- [Oracle] dbms_metadata.get_ddl的 (07/12/2013 07:37:30)
- MySQL 5.6 GA 及逃亡潮 (02/08/2013 14:36:35)
| - 数据库服务器 MySQL (08/15/2013 06:50:23)
- MySQL Administrator连接VMWare下 (05/24/2013 09:20:58)
- MySQL 5.1.68 发布 (02/05/2013 08:37:47)
|
本文评论 查看全部评论 (0)