MySQL 显示 2 个表的计数而不分组

MySQL Showing Count with 2 Tables Without Grouping

我有 2 个表格,我试图显示每个 item_id 的计数,以显示他们从 group_id 数量中获得的相关项目数量。

table_1 | item_id | item_name | |--------|----------------| | 1 |红领巾| | 2 |蓝色围巾 | | 3 |黄袜子 | | 4 |蓝色袜子 | | 5 |棕色袜子 |

table_2 | item_id | group_id | |--------|----------| | 1 | 1 | | 2 | 1 | | 3 | 2 | | 4 | 2 | | 5 | 2 |

desired_table_output | item_id | group_id | number_in_group | |--------|------------|--------------------| | 1 | 1 | 2 | | 2 | 1 | 2 | | 3 | 2 | 3 | | 4 | 2 | 3 | | 5 | 2 | 3 |

我发现的最接近的相关问题来自这里:count without group 但是 none 的示例似乎得到了所需的输出。

-- 失败的方法 #1

SELECT
  t.name,
  t.phone,
  COUNT('x') OVER (PARTITION BY t.name) AS namecounter
FROM
  Guys t

这行不通,因为我的版本是 5.7

-- 失败的方法#2 http://sqlfiddle.com/#!9/e6f1cd/148

SELECT
t1.item_id,
t1.item_name,
t2.counter
FROM table_1 t1
INNER JOIN (
SELECT item_id, COUNT(*) AS number_in_group
  FROM table_2
  GROUP BY group_id
) t2
ON t1.item_id = t2.item_id

这只显示有计数的第一行 - 但我需要每一行都有计数。

-- 失败的方法 #3 http://sqlfiddle.com/#!9/e6f1cd/150

SELECT
t1.item_id,
t1.item_name,
t2.counter
FROM table_1 t1
INNER JOIN (
SELECT item_id, COUNT(*) AS number_in_group
  FROM table_2
  GROUP BY item_id
) t2
ON t1.item_id = t2.item_id

这会显示每个 item_id,但每个都显示为 1。

您可以像这样使用第二个查询使用左连接

SELECT
t1.item_id,
t1.item_name,
t2.counter
FROM table_1 t1
LEFT JOIN (
SELECT item_id, COUNT(*) AS counter
  FROM table_2
  GROUP BY group_id
) t2
ON t1.item_id = t2.item_id

这可能适合你

SELECT
t1.item_id,
t1.item_name,
g.counter
FROM table_1 t1
JOIN table_2 t2 ON t1.item_id = t2.item_id
JOIN (
  SELECT group_id, COUNT(*) AS counter
  FROM table_2
  GROUP BY group_id
) g ON t2.group_id = g.group_id

http://sqlfiddle.com/#!9/e6f1cd/172