GROUP BY
* 不带日期
数据模型:http://photo.163.com/photos/kelven_vong/48662802/1366547565/
SQL 结果:http://photo.163.com/photos/kelven_vong/48662802/1366547565/
* 带日期
数据模型:http://photo.163.com/photos/kelven_vong/48662802/1366547597/
SQL 结果:http://photo.163.com/photos/kelven_vong/48662802/1366547582/
这是错误的:(报错 ORA-00979:不是一个 GROUP BY 表达式)
正确的是:
原因:
SELECT 语句中的非聚合表达式也出现在GROUP BY从句中,如果我们在SELECT语句中夹杂聚合与非聚合表达式,
SQL期望我们进行GROUP BY操作,我们必须在GROUP BY语句中列出所有的非聚合表达式。
上例中,FUSERNAME 就属于非聚合表达式了,因此要把它放到 GROUP BY 字句后面。
要注意的是,GROUP BY 后面跟的一定要是列名,不能是 AS 产生的别名。
关于 TOP N 和 ROWNUM
MS SQL Server 中的 “SELECT TOP n .....” 语句
对应 Oracle SQL 中的 “SELECT ....... FROM ...... WHERE ROWNUM <= n AND .....”
Oracle SQL 语法参考: http://blog.donews.com/chenyajun/
* 不带日期
数据模型:http://photo.163.com/photos/kelven_vong/48662802/1366547565/
SQL 结果:http://photo.163.com/photos/kelven_vong/48662802/1366547565/
* 带日期
数据模型:http://photo.163.com/photos/kelven_vong/48662802/1366547597/
SQL 结果:http://photo.163.com/photos/kelven_vong/48662802/1366547582/
这是错误的:(报错 ORA-00979:不是一个 GROUP BY 表达式)
SELECT T_PRD_FOOTBALLUSERRECORD.FUSERID AS FUSERID, T_PRD_FOOTBALLUSERRECORD.FUSERNAME AS FUSERNAME,SUM(T_PRD_FOOTBALLUSERRECORD.FWINSCORE) AS WINSCORE
FROM T_PRD_FOOTBALLUSERRECORD,T_USR_USER
WHERE T_PRD_FOOTBALLUSERRECORD.FUSERID=T_USR_USER.FID
GROUP BY FUSERID
FROM T_PRD_FOOTBALLUSERRECORD,T_USR_USER
WHERE T_PRD_FOOTBALLUSERRECORD.FUSERID=T_USR_USER.FID
GROUP BY FUSERID
正确的是:
SELECT T_PRD_FOOTBALLUSERRECORD.FUSERID AS FUSERID, T_PRD_FOOTBALLUSERRECORD.FUSERNAME AS FUSERNAME,SUM(T_PRD_FOOTBALLUSERRECORD.FWINSCORE) AS WINSCORE
FROM T_PRD_FOOTBALLUSERRECORD,T_USR_USER
WHERE T_PRD_FOOTBALLUSERRECORD.FUSERID=T_USR_USER.FID
GROUP BY FUSERID,FUSERNAME
FROM T_PRD_FOOTBALLUSERRECORD,T_USR_USER
WHERE T_PRD_FOOTBALLUSERRECORD.FUSERID=T_USR_USER.FID
GROUP BY FUSERID,FUSERNAME
原因:
SELECT 语句中的非聚合表达式也出现在GROUP BY从句中,如果我们在SELECT语句中夹杂聚合与非聚合表达式,
SQL期望我们进行GROUP BY操作,我们必须在GROUP BY语句中列出所有的非聚合表达式。
上例中,FUSERNAME 就属于非聚合表达式了,因此要把它放到 GROUP BY 字句后面。
要注意的是,GROUP BY 后面跟的一定要是列名,不能是 AS 产生的别名。
关于 TOP N 和 ROWNUM
MS SQL Server 中的 “SELECT TOP n .....” 语句
对应 Oracle SQL 中的 “SELECT ....... FROM ...... WHERE ROWNUM <= n AND .....”
Oracle SQL 语法参考: http://blog.donews.com/chenyajun/
浙公网安备 33010602011771号