关于oracle的多表连接分组查询

时间:2022-01-20 09:44:47
  目前遇到的问题是,我用的是两张表,一个是MANUFACTURE厂家表,一个是STB_DEVICE硬件设备表,STB_DEVICE表中引用了厂家表的厂家ID作为外键,现在想要通过厂家作为分组条件查询出各个厂家在硬件设备中的分布情况。用图表显示分布情况的。
String sql="select MANUFACTURE,count(MANUFACTURE) from STB_DEVICE group by MANUFACTURE";
这个语句是正确的,分布图的显示比例也是正确的,可是由于坐标用的是厂家ID,在分布图中只看到显示的ID不直观,用厂家名字比较好,但是STB_DEVICE表中没有MANUFACTURENAME字段,所要将sql语句改变成两表连接,内联,左外联都可以,可是不是语句有问题,就是查出来的比例不对。
查询没报错,但是分布图的比例不对的语句是:String sql="select MANUFACTURE_NAME,STB_DEVICE.MANUFACTURE_ID,(SELECT COUNT(MANUFACTURE_ID) FROM STB_DEVICE") FROM STB_DEVICE LEFT JOIN MANUFACTURE ON (STB_DEVICE.MANUFACTURE-_ID=MANUFACTURE.MANUFACTURE_ID) GROUP BY STB_DEVICE.MANUFACTURE_ID,MANUFACTURE_NAME ";

这种写法,关键是后面的group by , 该句的分组条件如何让它知道是根据STB_DEVICE表中的厂家id来比例分布的,最主要的是
STB_DEVICE表的分布,MANUFACTURE表只是用了他的MANUFACTURE_NAME字段,让他在STB_DEVICE的分布图上用名称显示而不是ID显示就可以了。

可是总是出现问题。说得有点乱,不懂的,我再重新说一下

3 个解决方案

#1


--不知道你是不是这样意思
select MANUFACTURE_NAME,countnum
from MANUFACTURE m,
  (select MANUFACTURE_ID,count(MANUFACTURE_ID) countnum 
  from STB_DEVICE group by MANUFACTURE_ID) t
where m.MANUFACTURE_ID=t.MANUFACTURE_ID 

#2


将你厂家表和硬件设备表通过关联字段连接起来就可以了
不知道是不是你说的情况:
SELECT a.MANUFACTURE_NAME,Count(b.MANUFACTURE_ID)
FROM MANUFACTURE a,STB_DEVICE b
WHERE a.MANUFACTURE_ID=b.MANUFACTURE_ID
GROUP BY a.MANUFACTURE_ID,a.MANUFACTURE_NAME

#3


我解决了,谢了^^

#1


--不知道你是不是这样意思
select MANUFACTURE_NAME,countnum
from MANUFACTURE m,
  (select MANUFACTURE_ID,count(MANUFACTURE_ID) countnum 
  from STB_DEVICE group by MANUFACTURE_ID) t
where m.MANUFACTURE_ID=t.MANUFACTURE_ID 

#2


将你厂家表和硬件设备表通过关联字段连接起来就可以了
不知道是不是你说的情况:
SELECT a.MANUFACTURE_NAME,Count(b.MANUFACTURE_ID)
FROM MANUFACTURE a,STB_DEVICE b
WHERE a.MANUFACTURE_ID=b.MANUFACTURE_ID
GROUP BY a.MANUFACTURE_ID,a.MANUFACTURE_NAME

#3


我解决了,谢了^^