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
我有 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