一个必须注意的地方是:SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是聚合函数列。
-----------------------------------
select a.NEW_RO_SO_CASE,
'' as testcol,
count(*)
from vedvr_master a,ve_issue_letter b,ve_letter_dvr c where a.dvr_id = c.dvr_id and c.letter_id = b.letter_id
group by a.NEW_RO_SO_CASE,b.LETTER_TYPE_CODE 运行没问题 而 select PARENT_DVR_ID,
(select ENG_DESC from VE_DEFECT_GROUP where DEFECT_GROUP_CODE = a.DEFECT_GROUP_CODE1) as DEFECT_GROUP_DESC,
count(*)
from vedvr_master a group by PARENT_DVR_ID,DEFECT_GROUP_DESC
------------------ 却有问题呢?
我的疑问是:
第一句:b.LETTER_TYPE_CODE没有出现在select的列表中,却能运行。同时,testcol可有可无 一样能运行
第二句:DEFECT_GROUP_DESC出现在select列表中 为什么又运行不了?
我想是不是一定是出现在from的tables的列表中才对啊?
-----------------------------------
select a.NEW_RO_SO_CASE,
'' as testcol,
count(*)
from vedvr_master a,ve_issue_letter b,ve_letter_dvr c where a.dvr_id = c.dvr_id and c.letter_id = b.letter_id
group by a.NEW_RO_SO_CASE,b.LETTER_TYPE_CODE 运行没问题 而 select PARENT_DVR_ID,
(select ENG_DESC from VE_DEFECT_GROUP where DEFECT_GROUP_CODE = a.DEFECT_GROUP_CODE1) as DEFECT_GROUP_DESC,
count(*)
from vedvr_master a group by PARENT_DVR_ID,DEFECT_GROUP_DESC
------------------ 却有问题呢?
我的疑问是:
第一句:b.LETTER_TYPE_CODE没有出现在select的列表中,却能运行。同时,testcol可有可无 一样能运行
第二句:DEFECT_GROUP_DESC出现在select列表中 为什么又运行不了?
我想是不是一定是出现在from的tables的列表中才对啊?
''是一个常量所以不需要聚合
-------
只要求select的列要出现在group by子句中,没说group by的列一定要出现在select中。
testcol是‘’,是一个常量,不是表中的列,无需聚合。
第二句:DEFECT_GROUP_DESC出现在select列表中 为什么又运行不了?
--------
group by后面不能使用前面的字段别名,你的DEFECT_GROUP_DESC是别名。
1)group by顾名思义分组,把很多条数据分成一组,也就是说返回的结果是"一条"
2)如果select a,b,count(*) from table_name group by a;
假设出现如下数据
1 2
1 3
a 返回值是分组后的1,b呢? 是返回2 还是返回3,数据库"傻了",因此必须
select a,b,count(*) from table_name group by a,b;
3)即使在2)的举例中 b中的数据是完全相同的。
如:
1 2
1 2
select a,b,count(*) from table_name group by a;
也是不可以的,因为虽然对于你,b是相同的这件事是"显而易见的",但是对于数据库它是"不知道的",
必须显示的告诉他。
4)对于常量情况就不同了,相当于你显示的告诉了数据库,b字段的值是一样的,因此常量不在
group by 后面出现也是可以的。2、sql的解析顺序是
from → where → group by → having → select → order by
因为 select 在 group by 后面被解析,因此在 select 中起的别名在 group by里面不会被识别。※以上观点属于个人理解,如有不对的地方还请高手指正。
--b.LETTER_TYPE_CODE没有出现在select的列表中,也是可在Group by 中,这样分组更细,testCol是常量不是字段,所以没有关系第二句:DEFECT_GROUP_DESC出现在select列表中 为什么又运行不了?
--DEFECT_GROUP_DESC是一个子查询,再嵌套一层就可以运行