查找不重复的统计数据的sql语句的写法

查找不重复的统计数据的sql语句的写法

http://wangminghui.com/bbs/redirect.php?tid=290&goto=lastpost

例表如下:
表名:MyTest
TID Field_1 Field_2 Field_3
1    1    A    A
2    1    A    A
3    2    A    A
4    2    B    A
5    3    B    B
6    3    B    B
7    4    C    B
8    4    C    B
9    1    A    A
1、查找表中的一个字段,重复的只找一个:
Select  Distinct Field_1 From MyTest
返回结果为:
1
2
3
4
2、查找表中的多个字段,其中某个字段不重复:
Select * From MyTest Where RowID In (Select Min(RowID) From MyTest Group By Field_1)
返回结果为:
结果为:
1    1    A    A
3    2    A    A
5    3    B    B
7    4    C    B
其中RowID为Oracle中的虚拟Column用来指向表中一个Row的存放地址,改为其它的不能运行.
Min方法若改为Max时返回结果如下:
6    3    B    B
8    4    C    B
9    1    A    A
10   2    B    A
3、查询并统计该字段的数量:
Select Field_1,Count(Field_1) From MyTest Group By Field_1
返回结果为:
1    3
2    3
3    2
4    2
注意:Group By 哪个字段只能查找哪个字段和该字段的数量。若要同时搜索其它字段就报错。如:
Select Field_2,Count(Field_1) From MyTest Group By Field_1或
Select Field_1,Field_2,Count(Field_1) From MyTest Group By Field_1
就会出错!
原因可能是:搜索的结果是一组组的数据。在每一组数据中,Field_2有很多,所以不能搜索出唯一的一个值。
4、从两个表中查询并统计数据:
表T_OverTime字段
Int TID = 0;//加班代码
Float Days = 0;//工日数
表T_OverTimePersonnel字段
Int TID = 0;//加班人员代码
Int OverTimeID = 0;//加班代码
Int UserID=0;//用户ID
统计每个用户的加班工日数
统计每个用户的加班工日数
Select b.UserID,Sum(a.Days) From T_OverTime a,T_OverTimePersonnel b Where a.TID=b.OverTimeID Group By b.UserID
以上是在oracle数据库中测试的结果。在其它数据库中不知是否能运行。欢迎大家提供更好更通用的方法。
5、按多个字段分组并统计:
Select Field_1,Field_2,Count(*) As Expr1 From MyTest Group By Field_1,Field_2
返回结果为:
Field_1 Field_2  Count
1    A    3
2    A    1
2    B    2
3    B    2
4    C    2
即按Field_1, Field_2分组后Field_1, Field_2的内容和每组中记录的数量。
若:Select Field_1, Field_2, Count(Distinct Field_3) As Expr1 From MyTest Group By Field_1, Field_2
返回结果为:
Field_1 Field_2  Count
1    A    1
2    A    1
2    B    1
3    B    1
4    C    1
若将第7条记录改为 7 4 C C
则结果为:
Field_1 Field_2  Count
1    A    1
2    A    1
2    B    1
3    B    1
4    C    2
即按Field_1, Field_2分组后Field_1, Field2的内容和每组中Field_3不重复的记录数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值