count distinct 结合

yaoyao1816 2006-09-29 02:57:08
各位大佬,小弟现在有一问题如下:

表名:vehicle(车辆信息表)

字段:id,vehicletype(车辆类型),vehiclecode(车牌号),company(所属单位)

目的:这个表里面统计出每个单位所拥有的车辆数,即执行sql后得出如下结果,
单位名称 车辆数
-------------------------------------------
公交第一公司 56
第一汽车运输公司 72
西湖长途运输公司 32


条件:1、由于同一个车辆可以在同一个单位登记多次,要求过滤掉重复的车辆,
通过(vehicletype+vehiclecode)来唯一确定一辆车,即当vehicletype和vehiclecode都相同的
时候,才是同一辆车;2、所属单位是不确定的,即数据库里有哪些单位,就显示那些单位的数


sql:我写的sql如下:
select company,count(distinct vehicletype,vehiclecode)
from vehicle
group by company

呵呵,这条语句在oracle里是不能执行的,就因为count(distinct vehicletype,vehiclecode)这段,好像在count()方法里的distinct后面只能跟一个字段,超过一个就会报错。






...全文
808 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
njcao 2006-09-29
  • 打赏
  • 举报
回复
不好意思.要求过滤掉重复的车辆...
所以应该是count(A.no),当然count(*)也可以

select A.company, count(A.no)
from
(select company, vehicletype, vehiclecode ,count(*) no
from vehicle
group by company, vehicletype, vehiclecode) A
group by A.company
njcao 2006-09-29
  • 打赏
  • 举报
回复
select A.company, sum(A.no)
from
(select company, vehicletype, vehiclecode ,count(*) no
from vehicle
group by company, vehicletype, vehiclecode) A
group by A.company

以上SQL已经过测试,应该满足楼主的要求.
yaoyao1816 2006-09-29
  • 打赏
  • 举报
回复
已经知道如何给分了,还有没有sql高手能帮我看看
yaoyao1816 2006-09-29
  • 打赏
  • 举报
回复
顺便请教下,如何给分?
yaoyao1816 2006-09-29
  • 打赏
  • 举报
回复
哥们,这样做不行的吧,这一句
where (v1.vehicletype, v1.vehiclecode) in (select distinct v2.vehicletype, v2.vehiclecode from vehicle v2)
的作用能说说看吗?

而且这样执行,得到的结果也是下面这种

车辆数
------------
56
72
32


这样,根本就不知道是哪个单位的车辆数?
henghowzc 2006-09-29
  • 打赏
  • 举报
回复
select vehicletype, vehiclecode,company, count(1)
from vehicle
group by vehicletype, vehiclecode,company
做个group就可以了。这个count()里面其实1就可以乐,随便什么都一样的
这个sql表示统计,按照公司里面该牌照的车的统计
select vehicletype, vehiclecode, count(1)
from vehicle
group by vehicletype, vehiclecode
表示该牌照的车的统计,忽略公司
Eric_1999 2006-09-29
  • 打赏
  • 举报
回复
错了,是in 不是int

select count(*)
from vehicle v1
where (v1.vehicletype, vehiclecode) in (select distinct v2.vehicletype, v2.vehiclecode from vehicle v2)
group by v1.company
Eric_1999 2006-09-29
  • 打赏
  • 举报
回复
select count(*)
from vehicle v1
where (v1.vehicletype, vehiclecode) int (select distinct v2.vehicletype, v2.vehiclecode from vehicle v2)
group by v1.company

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧