更改
GROUP BY p.pname, c.cname
至
GROUP BY c.cname
如果你正在分组 p.pname , 然后 COUNT(DISTINCT p.pno) 将永远返回1 除非两个 pno 有同样的 pname
p.pname
COUNT(DISTINCT p.pno)
pno
pname
我假设你以后正在使用Oracle 您使用相同表格查询其他问题的另一个问题 这是一个Oracle问题。
有些事情需要考虑。是否有多个客户订购了两个以上不同的零件?如果是这样,您是否要将客户名称与订购的零件一起退回?首先,让所有订购了两个以上不同部分的客户:
SELECT c.cno FROM customers c INNER JOIN orders o ON c.cno = o.cno INNER JOIN odetails od ON o.ono = od.ono GROUP BY c.cno HAVING COUNT(DISTINCT od.pno) > 2;
然后得到他们订购的零件:
WITH c1 AS ( SELECT c.cno FROM customers c INNER JOIN orders o ON c.cno = o.cno INNER JOIN odetails od ON o.ono = od.ono GROUP BY c.cno HAVING COUNT(DISTINCT od.pno) > 2 ) SELECT p.pno, p.pname, COUNT(*) FROM parts p INNER JOIN odetails od ON p.pno = od.pno INNER JOIN orders o ON od.ono = o.ono INNER JOIN c1 ON o.cno = c1.cno GROUP BY p.pno, p.pname;
顺便说一句,你应该考虑@ Strawberry的评论。你的表名很好,但是你的列的名字真是太可怕了。 Oracle为对象名称提供30个字符;使用它们。没有理由为列命名 pno 例如,而不是 product_id 。
product_id