【问题标题】:How to do this query in SQL?如何在 SQL 中执行此查询?
【发布时间】:2017-12-02 14:44:00
【问题描述】:

我有三个表 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

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 2017-09-28
      相关资源
      最近更新 更多