[英]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
您應該能夠通過對數據進行分組來做到這一點。
嘗試這樣的事情:
SELECT part, COUNT(id) AS TotalCountId
FROM TABLE_NAME
GROUP BY ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.