使用GROUP BY时从两个不同的表中选择

时间:2016-04-20 20:51:26

标签: sql oracle group-by

我正在使用Oracle SQL Dev 问题在于使用GROUP BY

我有两张名为CAR的表,其中包含有关汽车的详细信息,另一张名为OWNERS - 人们是CAR的所有者。

CAR

plateNo    make

246810     Ford
121416     BMW
182022     VW
162398     Tesla

OWNER

name      plateNo 

Joe       246810
Greg      246810
Brad      246810
Sam       121416
Kim       121416
Sal       182022
Betty     162398

我试图列出每辆车拥有的拥有者数量,并显示品牌和所有者数量

我可以从OWNER获得plateNo的计数

SELECT count(plateNo) AS NO_OWNERS
FROM OWNER
GROUP BY plateNo
ORDER BY COUNT(plateNo);

结果将是

NO_OWNERS
3
2
1
1

当我尝试将“make”添加到查询中时,就像这样

SELECT count(OWNER.plateNo), CAR.MAKE 
FROM OWNER, CAR
WHERE OWNER.plateNo = CAR.plateNo
GROUP BY OWNER.plateNo
ORDER BY COUNT(OWNER.plateNo);   

我收到错误“不是GROUP BY表达式” 我正在寻找的结果将是这样的

NO_OWNERS   make
3           Ford
2           BMW
1           VW
1           Tesla

如何进行此类查询?

此外,我如何在结果中显示plateNo?

2 个答案:

答案 0 :(得分:1)

然后使用GROUP BY中的正确字段。在此过程中,还要修复JOIN语法:

SELECT count(*), c.MAKE 
FROM OWNER o JOIN
     CAR c
     ON o.plateNo = c.plateNo
GROUP BY c.MAKE
ORDER BY COUNT(*) DESC;

简单规则:从不FROM子句中使用逗号; 始终使用显式JOIN语法。

答案 1 :(得分:0)

SELECT c.make, c.plateno, count(*)
FROM OWNER o
      INNER JOIN CAR c ON o.plateNo = c.plateNo
GROUP BY c.make, c.plateno
ORDER BY COUNT(*) DESC;

另一个简单的规则:在group by子句

中重复select子句的所有非聚合列