我有 2 個表,我試圖顯示每個 item_id 的計數,以顯示它們的 group_id 編號中有多少相關專案。
表_1 | item_id | 專案名稱 | |---------|--------------| | 1 | 紅圍巾| | 2 | 藍色圍巾| | 3 | 黃色襪子 | | 4 | 藍色襪子| | 5 | 棕色襪子 |
表_2 | item_id | group_id | |---------|----------| | 1 | 1 | | 2 | 1 | | 3 | 2 | | 4 | 2 | | 5 | 2 |
required_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但似乎沒有一個示例得到所需的輸出。
-- 失敗的方法 #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,但將每個 item_id 顯示為 1。
uj5u.com熱心網友回復:
這可能對你有用
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
uj5u.com熱心網友回復:
您可以像這樣使用第二個查詢使用左連接
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/343580.html
