我正在使用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?
答案 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子句的所有非聚合列