SQL:如何查找从一个表链接到另一个表的最小条目数

sou*_*ami 7 sql postgresql select count min

假设我有一些Table_A:

A_id | A_val
1      a
2      b
3      c
Run Code Online (Sandbox Code Playgroud)

一些表_B:

B_id | B_val
1      d
2      e
3      g
Run Code Online (Sandbox Code Playgroud)

和链接器Table_C:

A_id | B_id
1      1
2      1
2      2
3      1
3      2
3      3
Run Code Online (Sandbox Code Playgroud)

我需要帮助尝试找到表A中与表B中链接最少的项目的项目.我目前是使用PostgreSQL的SQL初学者,并认为它可能与使用子查询有关.我设法使用以下方法计算链接:

SELECT A_id, COUNT(B_id) as Num_links
  FROM TABLE_C
  GROUP BY A_id;
Run Code Online (Sandbox Code Playgroud)

但我不知道从哪里开始.

mat*_*tts 3

您可以使用with子句为“count”查询指定别名,并将其视为临时表。然后选择 中a_id小于num_links或等于最小计数的num_links

WITH link_counts AS (
         SELECT a_id, COUNT(b_id) as num_links
           FROM table_c
       GROUP BY a_id
     )
SELECT a_id
  FROM link_counts
 WHERE num_links <= (SELECT MIN(num_links) FROM link_counts)
Run Code Online (Sandbox Code Playgroud)

请注意,如果不同的链接数量相同(最低),则这可能会返回多行a_id(例如,如果a_id1 和 4 各只有 1 个链接)。

  • 请参阅此[SQL Fiddle 演示](http://sqlfiddle.com/#!1/ff6b2/6)。有用。干得好,马特。 (2认同)