Same Salary वाले Employees
काम
एक आम query — और interview सवाल — है "समान salary वाले employees ढूँढो"। इसका मतलब एक से ज़्यादा बार आने वाली salary values ढूँढना, और उन्हें साझा करते लोग list करना। औज़ार हैं GROUP BY with HAVING, और वैकल्पिक रूप से जोड़ी बनाने को self-join।
कौन-सी salaries दोहराती हैं
SELECT salary, COUNT(*) AS how_many FROM employees GROUP BY salary HAVING COUNT(*) > 1;
GROUP BY बराबर salaries समूहबद्ध करता है, और HAVING COUNT(*) > 1 सिर्फ़ एक से ज़्यादा employee द्वारा साझा वाले रखता है।
Employees list करना
SELECT name, salary
FROM employees
WHERE salary IN (
SELECT salary FROM employees
GROUP BY salary HAVING COUNT(*) > 1
);
Subquery साझा salaries ढूँढती है, और बाहरी query हर employee list करती है जिसकी salary उस set में है। अब आप असली लोग देखते हैं, सिर्फ़ salary values नहीं।
Self-join से जोड़ी बनाना
SELECT a.name AS emp1, b.name AS emp2, a.salary FROM employees a JOIN employees b ON a.salary = b.salary AND a.id < b.id;
Self-join employees को बराबर salary पर मिलाता है। Condition a.id < b.id हर जोड़ी एक बार दिखाता है और employee को ख़ुद से जोड़ने से रोकता है।
एक सामान्य pattern
यही दृष्टिकोण किसी भी "duplicate value" मामले को ढूँढता है: एक ही city के customers, एक ही price के products, एक ही marks वाले students। Column बदलिए, और GROUP BY / HAVING व self-join patterns बिल्कुल वैसे ही काम करते हैं।
हर कितने साझा करते हैं
SELECT salary, COUNT(*) AS employees FROM employees GROUP BY salary HAVING COUNT(*) > 1 ORDER BY employees DESC;
Count पर ORDER BY जोड़ना सबसे ज़्यादा साझा salaries पहले दिखाता है — एक नज़र में सबसे बड़े clusters पहचानने को उपयोगी।
आम गलतियाँ
- COUNT(*) को WHERE इस्तेमाल करना। GROUP BY के बाद HAVING इस्तेमाल कीजिए।
a.id < b.idबिना self-join। आपको duplicate और self-pairs मिलते हैं।- Subquery भूलना। लोग list करने को आपको यह चाहिए, सिर्फ़ salaries नहीं।
- गलत column से group करना। जिस value पर मिला रहे हैं उससे group कीजिए।
सारांश
- दोहराई salaries GROUP BY salary HAVING COUNT(*) > 1 से ढूँढिए।
- लोग subquery से list कीजिए: WHERE salary IN (वो group)।
- उन्हें बराबर salary और
a.id < b.idपर self-join से जोड़िए। - वही pattern किसी भी shared-value मामले को ढूँढता है।
- COUNT(*) पर filter को HAVING इस्तेमाल कीजिए, WHERE नहीं।
आगे, data group कीजिए GROUP BY और HAVING में, या repeats ढूँढिए finding duplicate rows में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
MySQL में समान salary वाले employees कैसे ढूँढूँ?
एक से ज़्यादा बार आने वाली salaries कैसे list करूँ?
SELECT salary FROM employees GROUP BY salary HAVING COUNT(*) > 1; इस्तेमाल कीजिए। GROUP BY बराबर salaries को समूहों में collapse करता है, और HAVING सिर्फ़ एक से ज़्यादा row वाले समूह रखता है।एक salary साझा करते employees के नाम कैसे पाऊँ?
SELECT name, salary FROM employees WHERE salary IN (SELECT salary FROM employees GROUP BY salary HAVING COUNT(*) > 1);। यह हर employee list करता है जिसकी salary साझा है।समान salary वाले employees की जोड़ी कैसे बनाऊँ?
SELECT a.name, b.name FROM employees a JOIN employees b ON a.salary = b.salary AND a.id < b.id;। a.id < b.id जोड़ियों को दोहराना और self-matches बचाता है।