明月松间照 清泉石上流


                                        ——— 兵临城下   猫科动物
posts - 70, comments - 137, trackbacks - 0, articles - 23
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于数据库count的问题

Posted on 2006-11-13 11:38 兵临城下 阅读(1700) 评论(6)  编辑  收藏 所属分类: Java EE

有以下一个表:programmer
id        name      adresss
1         xc          cn
2         xc          ae
2         xc           rr

现在我要计算总条数,用count, select count(*) as acount from programmer,这条语句返回3。
因为这条语句count(*)是计算的所有的字段,而我现在这样一个要求,就是说写一条sql语句count id和name 两个字段,并去掉重复记录,就是说我查询id和name两个字段,去掉重复记录并返回记录的条数。
想了很多办法都没成功,网上有这么一条语句:select count(distinct 'id&name') as acount from programmer ,从语句上看好像符合了我的要求,但是这条sql语句返回的却是1 ,而不是2 ,不知到为什么,还向各位请教。有什么其他的办法吗??急等


评论

# re: 关于数据库count的问题  回复  更多评论   

2006-11-16 12:16 by Jwin
distinct作用是去掉重复数据.
例如:表 A 数据如下
1 xc cn
1 xc cn
2 xc cn
2 xc cn
3 xc cn
3 xc cn
4 xc cn
4 xc cn
4 xc cn

select distinct * from A;
得出的结论就是
1 xc cn
2 xc cn
3 xc cn
4 xc cn
这样明白吧??

# re: 关于数据库count的问题  回复  更多评论   

2006-11-16 16:03 by 兵临城下
谢谢你的回复,这个我明白,但我还有疑问,可能仁兄没有看懂我的意思。
表A,数据如下
1 xc cn
1 xc ae
1 xc cn
2 dd cn

select distinct * from A;
返回
1 xc cn
1 xc ae
2 dd cn

select dinstinct id,name from A;
返回
1 xc cn
2 dd cn

这些我都知道。而现在我想要的是写一条sql语句,计算返回符合要求的数据库record的条数,就是(如以上的数据)我要dinstinct id 和name 两个字段,并且返回数据2。
select count(distinct 'id&name') as acount from A 返回的值为2。呵呵

# re: 关于数据库count的问题  回复  更多评论   

2006-11-16 17:05 by loocky
select count(distinct id||name) as count from a

# re: 关于数据库count的问题  回复  更多评论   

2006-11-16 20:17 by 兵临城下
谢了,可以成功执行。可我原本的问题比这复杂,我一个联合查询语句如下:
SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF

这条语句能成功执行,而下面这条语句却不行:

SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF

差别在于加了一个A.I_AUTH_LEVEL的字段,此字段为integer类型,就不能成功,如果换一个字段为charactor的就可以。
难道查询字段也有区别?望指点

# re: 关于数据库count的问题  回复  更多评论   

2006-11-17 08:49 by loocky
没有明白你的意思,不好意思

# re: 关于数据库count的问题  回复  更多评论   

2006-11-18 09:25 by 兵临城下
我的意思是:如果有以下两条语句
语句一:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF

语句二:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.C_USER_ID) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
第一条语句能成功执行,而第二条则会报错。两条语句的差别在于count函数的内部最后一个字段,(语句一:|| A.I_AUTH_LEVEL 语句二:|| A.C_USER_ID),I_AUTH_LEVEL 为integer,而C_USER_ID为charactor,我所能找到的差别就在此,我就问为什么语句二为什么不能执行成功,难道字段类型也有影响??

只有注册用户登录后才能发表评论。


网站导航: