如何在SQL中执行此查询?

时间:2017-12-02 14:44:00

标签: sql postgresql

我有三个表ProductSupplierSecondary_Supplier。它们看起来像这样:

我需要进行此查询:

提供大多数(不同)类别的供应商的名称是什么?“注意:可以不止一个。还有每个产品作为主要供应商和至少一个二级供应商。

Supplier

|ID | name|
----------
|1  | John|
----------
|2  | Andrew|
----------
|3  | Mariah|
----------
|4  | Drew|
----------

二级供应商

|ID | ProdID|
----------
|4  | 121 |
----------
|1  | 122 |
----------
|2  | 123 |
----------
|2  | 125 |
----------
|3  | 124 |
----------

产品

|ProdID | Prim_ID | Category |       
----------------------------
|121    | 2        | Tampons|
----------------------------
|122    | 3        | Soda|
----------------------------
|123    | 3        | Makeup|
----------------------------
|124    | 4        | Chicken|
----------------------------
|125    | 1        | Tampons|
----------------------------

运行查询后,它应该给我这样的东西:

|name  | COUNT|
-------------
|Mariah| 3|
-------------

问题是产品有主要供应商和至少一个二级供应商。因此,当我进行产品自然连接Secondary_Supplier时,我的新表有2行供应商ID,我需要在两行中搜索。

我试过这个:

Select COUNT(DISTINCT category) as count, Prim_ID
From Product
Group by Prim_ID
Order by count DESC
Limit 1;

但我只获得主要供应商(Prim_ID)。此外,如果我有一个或多个它只显示其中一个(我认为这是因为limit 1

1 个答案:

答案 0 :(得分:0)

如果您正在寻找具有count = max count

的所有Prim_id

您可以选择加入计数的最大值,例如:

Select COUNT(DISTINCT category) as count, Prim_ID
From Product
FULL JOIN (
  Select COUNT(DISTINCT category) as count, Prim_ID
  From Product
  Group by Prim_ID
  Order by count DESC
  Limit 1
) t 
Group by Prim_ID
having count = t.count