簡體   English   中英

選擇所有具有相同ID的行

[英]Select all rows that have same ID

我有這張桌子:

ID | Part
1  | A
1  | B
1  | C
2  | B
2  | C
3  | A
3  | D
3  | E
4  | B
4  | D

並希望查詢將獲取所有具有A的ID,並返回具有該ID的所有其他部分的列表。

例如:想要與B相關的零件:

Part | Count
 A   | 1
 C   | 2
 D   | 1

我目前所擁有的:

SELECT * FROM tble WHERE ID IN (SELECT DISTINCT ID FROM tble t WHERE Part = ?)
GROUP BY Part ORDER BY COUNT(Part) DESC

該方法有效,但是速度很慢,我正在尋求改進,但是有困難

簡化此過程。一旦您掌握了邏輯,然后在SELECT * FROM中重新添加。

SELECT Part, COUNT(Part) As Count_of_Part
GROUP BY Part ORDER BY COUNT(Part) DESC

將表從連接返回到ID本身,然后計算彈出的不同值:

SELECT b.part, COUNT(DISTINCT b.id)
FROM 
    table as a 
    INNER JOIN table as b ON
        a.id = b.id AND
        a.part <> b.part
WHERE
    a.part = 'B'
GROUP BY b.part

您的查詢不是沒有道理的,盡管distinct是不必要的,我將使用exists而不是in 而且,外部select需要固定進行匯總

SELECT t.part, COUNT(*)
FROM tble t
WHERE EXISTS (SELECT 1 FROM tble t2 WHERE t2.ID = t.ID AND t2.Part = ?)
GROUP BY t.Part
ORDER BY COUNT(*) DESC;

然后,要優化此查詢,您需要一個索引:

create index idx_tble_id_part on tble(id, part);

可以簡單地通過加入表來完成:

SELECT t1.part
,count(*)
FROM tble t1
INNER JOIN tble t ON t.id = t1.id
                  AND t.part = 'B'
                  AND t1.part <> t.part
GROUP BY t1.part

SQL小提琴演示

您應該能夠通過對數據進行分組來做到這一點。

嘗試這樣的事情:

SELECT part, COUNT(id) AS TotalCountId
FROM TABLE_NAME
GROUP BY ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM