ہر وہ چیز جو آپ کو SQL GROUP BY بیان کے بارے میں جاننے کی ضرورت ہے۔

ہر وہ چیز جو آپ کو SQL GROUP BY بیان کے بارے میں جاننے کی ضرورت ہے۔

رشتہ دار ڈیٹا بیس کی زیادہ تر طاقت ڈیٹا کو فلٹر کرنے اور میزوں کو جوڑنے سے آتی ہے۔ یہی وجہ ہے کہ ہم ان تعلقات کی پہلی جگہ نمائندگی کرتے ہیں۔ لیکن جدید ڈیٹا بیس سسٹم ایک اور قیمتی تکنیک فراہم کرتے ہیں: گروہ بندی۔





گروپنگ آپ کو ڈیٹا بیس سے خلاصہ معلومات نکالنے کی اجازت دیتی ہے۔ یہ آپ کو مفید شماریاتی ڈیٹا بنانے کے لیے نتائج کو یکجا کرنے دیتا ہے۔ گروپنگ آپ کو عام معاملات جیسے اعداد و شمار کی اوسط فہرستوں کے لیے کوڈ لکھنے سے بچاتی ہے۔ اور یہ زیادہ موثر نظام بنا سکتا ہے۔





شق کے مطابق گروپ کیا کرتا ہے؟

گروپ بائی ، جیسا کہ نام سے پتہ چلتا ہے ، گروپوں کا نتیجہ چھوٹے سیٹ میں ہوتا ہے۔ نتائج گروپ شدہ کالم کی ہر ایک الگ قدر کے لیے ایک قطار پر مشتمل ہوتے ہیں۔ ہم قطار کے ساتھ کچھ نمونہ ڈیٹا کو دیکھ کر اس کا استعمال دکھا سکتے ہیں جو کچھ مشترک اقدار کا اشتراک کرتے ہیں۔





ویب سائٹ پر الفاظ کو کیسے تبدیل کیا جائے۔

درج ذیل ایک بہت ہی سادہ ڈیٹا بیس ہے جس میں دو میزیں ہیں جو ریکارڈ البمز کی نمائندگی کرتی ہیں۔ آپ اس طرح کا ڈیٹا بیس ترتیب دے سکتے ہیں۔ ایک بنیادی سکیما لکھنا آپ کے منتخب کردہ ڈیٹا بیس سسٹم کے لیے۔ کی البمز ٹیبل میں ایک بنیادی کلید کے ساتھ نو قطاریں ہیں۔ آئی ڈی کالم اور کالم برائے نام ، فنکار ، ریلیز کا سال ، اور فروخت:

+----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

کی فنکار ٹیبل اور بھی آسان ہے۔ اس میں آئی ڈی اور نام کالم کے ساتھ سات قطاریں ہیں:



+----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

آپ گروپ BY کے مختلف پہلوؤں کو صرف اس طرح کے ایک سادہ ڈیٹا سیٹ سے سمجھ سکتے ہیں۔ یقینا، ، ایک حقیقی زندگی کے ڈیٹا سیٹ میں کئی ، کئی اور قطاریں ہوں گی ، لیکن اصول ایک جیسے ہیں۔

ایک کالم کے لحاظ سے گروپ بندی

ہم کہتے ہیں کہ ہم یہ جاننا چاہتے ہیں کہ ہمارے پاس ہر فنکار کے کتنے البم ہیں۔ ایک عام سے شروع کریں۔ منتخب کریں آرٹسٹ_ڈ کالم لانے کے لیے استفسار:





SELECT artist_id FROM albums

یہ تمام نو قطاریں لوٹاتا ہے ، جیسا کہ توقع کی جاتی ہے:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
+-----------+

آرٹسٹ کے ذریعہ ان نتائج کو گروپ کرنے کے لیے ، جملہ شامل کریں۔ آرٹسٹ_ آئی ڈی کے ذریعے گروپ۔ :





SELECT artist_id FROM albums GROUP BY artist_id

جو مندرجہ ذیل نتائج دیتا ہے:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+-----------+

نتائج کے سیٹ میں سات قطاریں ہیں ، جو کہ کل نو سے کم ہیں۔ البمز ٹیبل. ہر ایک منفرد۔ فنکار_ id ایک قطار ہے آخر میں ، اصل شمار حاصل کرنے کے لیے ، شامل کریں۔ شمار(*) منتخب کالموں کے لیے:

SELECT artist_id, COUNT(*)
FROM albums
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+-----------+----------+

نتائج آئی ڈی والے فنکاروں کے لیے قطاروں کے دو جوڑوں کو گروپ کرتے ہیں۔ اور . ہمارے ڈیٹا بیس میں ہر ایک کے دو البم ہیں۔

متعلقہ: شروع کرنے والوں کے لیے ضروری ایس کیو ایل کمیٹ دھوکہ شیٹ۔

مجموعی فنکشن کے ساتھ گروپ شدہ ڈیٹا تک کیسے رسائی حاصل کی جائے۔

ہوسکتا ہے کہ آپ نے استعمال کیا ہو۔ شمار پہلے کام کریں ، خاص طور پر شمار(*) جیسا کہ اوپر دیکھا گیا ہے۔ یہ ایک سیٹ میں نتائج کی تعداد حاصل کرتا ہے۔ آپ اسے ٹیبل میں ریکارڈ کی کل تعداد حاصل کرنے کے لیے استعمال کر سکتے ہیں:

SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

COUNT ایک مجموعی فنکشن ہے۔ اس اصطلاح سے مراد وہ افعال ہیں جو اقدار کو ایک سے زیادہ قطاروں سے ایک ہی قدر میں ترجمہ کرتے ہیں۔ وہ اکثر GROUP BY بیان کے ساتھ مل کر استعمال ہوتے ہیں۔

صرف قطاروں کی تعداد گننے کے بجائے ، ہم گروپ شدہ اقدار پر مجموعی فنکشن کا اطلاق کر سکتے ہیں:

SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

فنکاروں 2 اور 6 کے لیے اوپر دکھائی گئی کل فروخت ان کے متعدد البمز کی مشترکہ فروخت ہے:

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

متعدد کالموں کی طرف سے گروپ بندی

آپ ایک سے زیادہ کالم کے ذریعے گروپ کر سکتے ہیں۔ صرف ایک سے زیادہ کالم یا تاثرات شامل کریں ، کوما سے الگ۔ نتائج ان کالموں کے مجموعے کے مطابق گروپ کیے جائیں گے۔

SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

یہ عام طور پر ایک کالم کے لحاظ سے گروپ بندی سے زیادہ نتائج پیدا کرے گا:

+--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
+--------------+-------+----------+

نوٹ کریں کہ ، ہماری چھوٹی مثال میں ، صرف دو البمز میں ایک ہی ریلیز کا سال اور فروخت کا شمار ہے (1977 میں 28)۔

مفید مجموعی افعال۔

COUNT کے علاوہ ، کئی افعال GROUP کے ساتھ اچھی طرح کام کرتے ہیں۔ ہر فنکشن ہر رزلٹ گروپ کے ریکارڈ کی بنیاد پر ایک ویلیو لوٹاتا ہے۔

  • COUNT () مماثل ریکارڈوں کی کل تعداد لوٹاتا ہے۔
  • SUM () دیئے گئے کالم میں شامل تمام اقدار کی کل واپسی کرتا ہے۔
  • MIN () دیئے گئے کالم میں سب سے چھوٹی قدر لوٹاتا ہے۔
  • MAX () دیئے گئے کالم میں سب سے بڑی قدر لوٹاتا ہے۔
  • AVG () اوسط اوسط لوٹاتا ہے۔ یہ SUM () / COUNT () کے برابر ہے۔

آپ ان افعال کو GROUP شق کے بغیر بھی استعمال کر سکتے ہیں:

ایک پرنٹر میں سب سے سستا۔
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

WHERE شق کے ساتھ GROUP BY کا استعمال۔

جیسا کہ ایک عام SELECT کے ساتھ ، آپ اب بھی نتیجہ سیٹ کو فلٹر کرنے کے لیے WHERE استعمال کر سکتے ہیں:

SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 4 | 1 |
| 6 | 2 |
+-----------+----------+

اب آپ کے پاس صرف وہی البمز ہیں جو 1990 کے بعد ریلیز ہوئے ، فنکار کے لحاظ سے گروپ کیے گئے۔ آپ GROUP BY سے آزادانہ طور پر WHERE شق کے ساتھ شمولیت بھی استعمال کر سکتے ہیں:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
+---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

تاہم ، نوٹ کریں کہ اگر آپ ایک مجموعی کالم کی بنیاد پر فلٹر کرنے کی کوشش کرتے ہیں:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

آپ کو ایک غلطی ملے گی:

ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

مجموعی اعداد و شمار پر مبنی کالم WHERE شق کے لیے دستیاب نہیں ہیں۔

HAVING شق کا استعمال۔

تو ، گروپ بندی کے بعد آپ رزلٹ سیٹ کو کیسے فلٹر کرتے ہیں؟ کی ہو رہا ہے شق اس ضرورت سے متعلق ہے:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

نوٹ کریں کہ HAVING شق GROUP BY کے بعد آتی ہے۔ بصورت دیگر ، یہ بنیادی طور پر جہاں موجود ہے کے ساتھ سادہ متبادل ہے۔ نتائج یہ ہیں:

+------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

آپ گروپ بندی سے پہلے نتائج کو فلٹر کرنے کے لیے WHERE حالت استعمال کر سکتے ہیں۔ یہ گروپنگ کے بعد فلٹرنگ کے لیے HAVING شق کے ساتھ مل کر کام کرے گا:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

ہمارے ڈیٹا بیس میں صرف ایک فنکار نے 1990 کے بعد ایک سے زیادہ البم جاری کیے:

+-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

GROUP BY کے ساتھ نتائج کا امتزاج

GROUP BY بیان SQL زبان کا ناقابل یقین حد تک مفید حصہ ہے۔ یہ مثال کے طور پر مواد کے صفحے کے لیے ڈیٹا کی خلاصہ معلومات فراہم کر سکتا ہے۔ یہ بڑی مقدار میں ڈیٹا لانے کا ایک بہترین متبادل ہے۔ ڈیٹا بیس اس اضافی کام کے بوجھ کو اچھی طرح سنبھالتا ہے کیونکہ اس کا ڈیزائن ہی اسے کام کے لیے بہترین بنا دیتا ہے۔

ایک بار جب آپ گروہ بندی اور ایک سے زیادہ جدولوں میں شامل ہونے کا طریقہ سمجھ لیں گے ، تو آپ رشتہ دار ڈیٹا بیس کی زیادہ تر طاقت استعمال کر سکیں گے۔

بانٹیں بانٹیں ٹویٹ ای میل۔ ایس کیو ایل میں شامل ہونے کے ساتھ ایک سے زیادہ ڈیٹا بیس کی میزیں کیسے پوچھیں۔

سوالات کو ہموار کرنے ، وقت کی بچت اور آپ کو ایس کیو ایل پاور صارف کی طرح محسوس کرنے کے لیے ایس کیو ایل جوائنز کا استعمال کرنا سیکھیں۔

پس منظر کو شفاف مصوری بنانے کا طریقہ
اگلا پڑھیں۔ متعلقہ موضوعات۔
  • پروگرامنگ۔
  • ایس کیو ایل
مصنف کے بارے میں بوبی جیک۔(58 مضامین شائع ہوئے)

بوبی ایک ٹیکنالوجی کے شوقین ہیں جنہوں نے دو دہائیوں تک سافٹ ویئر ڈویلپر کی حیثیت سے کام کیا۔ وہ گیمنگ کے بارے میں پرجوش ہے ، سوئچ پلیئر میگزین میں بطور ریویو ایڈیٹر کام کرتا ہے ، اور آن لائن پبلشنگ اور ویب ڈویلپمنٹ کے تمام پہلوؤں میں ڈوبا ہوا ہے۔

بوبی جیک سے مزید

ہماری نیوز لیٹر کو سبسکرائب کریں

ٹیک ٹپس ، جائزے ، مفت ای بکس ، اور خصوصی سودوں کے لیے ہمارے نیوز لیٹر میں شامل ہوں!

سبسکرائب کرنے کے لیے یہاں کلک کریں۔