2016-04-03 19 views
4

tablosunda, employee_id sütununda yinelenen değerleri olan bir tablo var. Tüm satırları, adlarıyla birlikte yinelenen worker_ids ile listelemem gerekiyor. Tüm kullanıcıların bir kopyasını employee_id ile görmem gerekiyor, böylece hangi değerlerin geçerli olduğunu çözmüyorum.SQL, bir sütun içinde yinelenen değerleri olan tüm satırları seçmek için SQL

SELECT name,employee_id 
FROM users; 

name  | employee_id 
----------------------- 
jason  12345 
tom  34567 
jane  12345 
will  01020 
bill  12345 

dönmek gerekiyor: Ben benzer soruları görmek

name  | employee_id 
------------------------- 
jason  12345 
jane   12345 
bill   12345 

, ama yine de ihtiyacım doğru sözdizimi alınamıyor. Aşağıda sadece bir tane oluşumu alıyorum. Yukarıdaki gibi yinelenen employee_id ile tüm olayları istiyorum.

SELECT employee_id, MAX(name) 
FROM users 
GROUP BY employee_id 
HAVING COUNT(employee_id) > 1; 

cevap

8

Sen pencereli COUNT kullanabilirsiniz:

SELECT sub.name, sub.employee_id 
FROM (SELECT *, COUNT(*) OVER(PARTITION BY employee_id) AS c 
     FROM users) AS sub 
WHERE c > 1; 

LiveDemo

veya basit IN:

SELECT * 
FROM users 
WHERE employee_id IN (SELECT employee_id 
         FROM users 
         GROUP BY employee_id 
         HAVING COUNT(employee_id) > 1); 

LiveDemo2

veya ilişkili alt sorgu:

SELECT name, employee_id 
FROM users u 
,LATERAL (SELECT COUNT(*) FROM users u2 WHERE u.employee_id = u2.employee_id) AS s(c) 
WHERE c > 1; 

SqlFiddleDemo

+1

Bu harika, teşekkürler! – Jason

İlgili konular