如何统计一个外键并用它来排序主table?

How to count a foreign key and use it to sort the primary table?

我有 2 个表:

我正在尝试进行查询,为我提供每个仅提供一种产品的供应商的 vend_name 列表。 vend_idProduct 中的外键,我想计算每个 vend_idProduct 中有多少个实例,然后列出 vend_name那些只出现一次的。任何帮助将不胜感激。

我正在使用 Oracle SQL Developer(因为我必须)。

这就是我所拥有的,但不断收到“无效标识符”或“此处不允许组函数”的提示

select count(*), Product.vend_id, Vendor.vend_id 
from Product 
inner join Vendor on Product.vend_id = vend.vend_id 
where count(*) < 2 
group by product.vend_id, vendor.vend_name;

像这样的东西应该可以工作:

SELECT vend_name
  FROM Vendor
 WHERE vend_id IN (
        SELECT vend_id
          FROM Product
         GROUP BY vend_id
        HAVING COUNT(DISTINCT product_id) = 1
       )
;

如果您想 select 只有一种产品的供应商,查询类似于:

select Vend_id, count(*) as Tot_Products
from Product 
group by Vend_id
having count(*) = 1

我建议你学习函数 GROUP BY... HAVING,这样你就可以在 calcolata 列上写一个条件(就像 MAX, MIN 和所有其他函数的结果一样)而无需使用 nasted查询如:

select *
from (select Vend_id, count(*) as Tot_Products
    from Product 
    group by Vend_id)
where Tot_Products = 1

现在你有了每个只有一个产品的供应商的 Id,现在你可以通过加入供应商来获取供应商的所有信息,你有这样的东西吗:

SELECT V.Vend_name
FROM (  select Vend_id 
        from Product 
        having count(*) = 1
        group by Vend_id )as P
inner join Vendors as V
    on p.Vend_id = V.Vend_id