MySQL GROUP BY පැහැදිලි කිරීම: වක්‍රරචනය, උදාහරණ, HAVING, ORDER BY සහ කාර්ය සාධන වැඩිදියුණු කිරීම

.

1. හැඳින්වීම: GROUP BY සාරාංශය

දත්ත ගබඩාවක විශාල පරිමාණ දත්ත සමඟ වැඩ කරන විට, GROUP BY වාක්‍යය දත්ත කාර්යක්ෂමව එකතු කිරීම සහ සංවිධානය කිරීම සඳහා ශක්තිමත් මෙවලමක් වේ. GROUP BY යනු නියමිත තීරුවල පදනම්ව ලේඛන සමූහ කර, එක් එක් සමූහයට එකතු කිරීම සිදු කිරීම සඳහා භාවිතා කරයි. උදාහරණයක් ලෙස, ඔබට එක් එක් නිෂ්පාදන වර්ගය සඳහා මුළු විකුණුම් ගණනය කිරීමට අවශ්‍ය නම්, මෙම වාක්‍යය ඔබට අවශ්‍ය ප්‍රතිඵල පහසුවෙන් ලබා ගැනීමට ඉඩ සලසයි.

GROUP BY වාක්‍යය භාවිතා කිරීමෙන්, ඔබට දත්ත දෘශ්‍යමයව තේරුම්ගත හැකි ආකාරයකින් සංවිධානය කර, SUM, COUNT, AVG වැනි එකතු කිරීමේ ක්‍රියාකාරකම් (aggregate functions) සමඟ ගැඹුරු විශ්ලේෂණයක් සිදු කළ හැකිය.

2. GROUP BY හි මූලික භාවිතය

GROUP BY වාක්‍යය ඔබට නියමිත තීරුවල පදනම්ව දත්ත සමූහ කර, එක් එක් සමූහයට එකතු කිරීම සිදු කිරීමට ඉඩ සලසයි. මෙය නියමිත කාණ්ඩ හෝ කොන්දේසි මත සාරාංශ සහ සංඛ්‍යාලේඛන පහසුවෙන් ජනනය කිරීමට උපකාරී වේ.

මූලික ව්‍යුහය

SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;

උදාහරණය

එක් එක් නිෂ්පාදන වර්ගය සඳහා මුළු විකුණුම් ගණනය කිරීමට, පහත පරිදි විමසුම ලියන්න:

SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category;

මෙම විමසුම එක් එක් නිෂ්පාදන වර්ගය සඳහා මුළු විකුණුම් ගණනය කරයි.

උදාහරණ ප්‍රතිඵල

product_categorySUM(sales_amount)
Electronics100,000
Food50,000
Clothing75,000

3. GROUP BY සමඟ එකතු කිරීමේ ක්‍රියාකාරකම් (Aggregate Functions) එකතු කිරීම

GROUP BY වාක්‍යය එකතු කිරීමේ ක්‍රියාකාරකම් සමඟ එකතු කිරීමෙන්, ඔබට දත්ත සමූහ කර, එක් එක් සමූහයට සංඛ්‍යාන තොරතුරු ලබා ගත හැකිය. MySQL හි සාමාන්‍යයෙන් භාවිතා වන එකතු කිරීමේ ක්‍රියාකාරකම් පහත පරිදි වේ:

  • SUM() : සංඛ්‍යාත්මක අගයන්ගේ මුළු එකතුව ගණනය කරයි.
  • COUNT() : ලේඛන ගණන ගණනය කරයි.
  • AVG() : සංඛ්‍යාත්මක දත්තයේ සාමාන්‍ය අගය ගණනය කරයි.
  • MAX() : උපරිම අගය ලබා ගනී.
  • MIN() : අවම අගය ලබා ගනී.

නියැදි විමසුම

එක් එක් නිෂ්පාදන වර්ගය සඳහා මුළු විකුණුම් සහ ගනුදෙනු ගණන දෙකම ලබා ගැනීමට, පහත විමසුම ලියන්න:

SELECT product_category, SUM(sales_amount), COUNT(*)
FROM sales
GROUP BY product_category;

මෙම විමසුම product_category සඳහා මුළු විකුණුම් සහ ගනුදෙනු ගණන ලබා ගනී.

4. HAVING වාක්‍යය සමඟ පෙරහන් කිරීම

HAVING වාක්‍යය GROUP BY වාක්‍යය විසින් නිර්මාණය කරන ලද සමූහ කළ දත්ත සඳහා අතිරේක කොන්දේසි යෙදීමට භාවිතා වේ. HAVING හි ප්‍රධාන ලක්ෂණය වන්නේ එකතු කිරීමේ ක්‍රියාකාරකම් මත පදනම්ව පෙරහන් කිරීමේ හැකියාවයි. WHERE වාක්‍යය එකතු කිරීමට පෙර දත්ත පෙරහන් කරන අතර, HAVING එකතු කිරීම සිදු වූ පසු ප්‍රතිඵල පෙරහන් කරයි.

නියැදි විමසුම

උදාහරණයක් ලෙස, මුළු විකුණුම් 1000 ට වැඩි වන වර්ගයන් පමණක් ලබා ගැනීමට, පහත විමසුම ලියන්න:

SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
HAVING SUM(sales_amount) > 1000;

මෙම විමසුම මුළු විකුණුම් 1000 ට වැඩි වන නිෂ්පාදන වර්ගයන් පමණක් ලබා ගනී.

5. ORDER BY සමඟ GROUP BY භාවිතය

GROUP BY වාක්‍යය භාවිතා කර දත්ත සමූහ කළ පසු, ORDER BY වාක්‍යය භාවිතා කර ප්‍රතිඵල අනුක්‍රමික (ASC) හෝ අවර්තන (DESC) ලෙස සකස් කළ හැකිය.

නියැදි විමසුම

මුළු විකුණුම් අනුව නිෂ්පාදන වර්ගයන් අවර්තන ක්‍රමයෙන් (DESC) සකස් කිරීමට, පහත විමසුම භාවිතා කරන්න:

SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
ORDER BY SUM(sales_amount) DESC;

මෙම විමසුම මුළු විකුණුම් ඉහළින් පටන් ගනිමින් නිෂ්පාදන වර්ගයන් පෙන්වයි.

6. උසස් GROUP BY භාවිතය: WITH ROLLUP

WITH ROLLUP යනු GROUP BY වාක්‍යයට එක් කරන විස්තාරයක් වන අතර, සමූහ ප්‍රතිඵලවලට අමතරව සාරාංශ පේළි (grand totals) ස්වයංක්‍රීයව එක් කරයි. මෙය එක් එක් සමූහ සඳහා මුළු එකතුවක් පමණක් නොව, සමස්ත මුළු එකතුවද ලබා ගැනීමට පහසු කරයි. විශේෂයෙන්ම විකුණුම් වාර්තා සහ සාරාංශ වාර්තා සඳහා ඉතා ප්‍රයෝජනවත් වේ.

නියැදි විමසුම

පහත විමසුම එක් එක් නගරය සඳහා මුළු විකුණුම්, සමඟ සමස්ත මුළු විකුණුම්ද පෙන්වයි:

.“` SELECT city, SUM(sales_amount) FROM sales GROUP BY city WITH ROLLUP;

මෙම විමසුම නගර අනුව සමස්ත විකුණුම් ප්‍රදර්ශනය කරයි, එසේම සියලු විකුණුම් වල සමස්ත එකතුවද ඇතුළත් කරයි.



## 7. GROUP BY සහ DISTINCT අතර වෙනස



**DISTINCT** සහ **GROUP BY** දෙකම දත්ත සංවිධානය කිරීමට භාවිතා කරයි, නමුත් ඒවා වෙනත් අරමුණු සඳහා සේවය කරයි. DISTINCT අනුපිළිවෙළ දත්ත ඉවත් කර අද්විතීය අගයන් ලබා දෙයි, එසේම GROUP BY දත්ත කණ්ඩායම් කර ඒකක කිරීම සිදු කරයි.



### නියැදි විමසුම් සංසන්දනය



අද්විතීය නිෂ්පාදන ප්‍රවර්ග ලැයිස්තුව ලබා ගැනීමට DISTINCT භාවිතා කිරීමේ උදාහරණයක්:

SELECT DISTINCT product_category FROM sales;

නිෂ්පාදන ප්‍රවර්ග අනුව ගනුදෙනු ගණන ලබා ගැනීමට GROUP BY භාවිතා කිරීමේ උදාහරණයක්:

SELECT product_category, COUNT(*) FROM sales GROUP BY product_category;

DISTINCT සරලව අනුපිළිවෙළ දත්ත ඉවත් කරන අතර, GROUP BY ඒකක කිරීම සිදු කරයි, එය දෙක අතර වැදගත් වෙනසකි.



## 8. MySQL හි GROUP BY සඳහා කාර්ය සාධන අභිලේඛනය



විශාල දත්ත කට්ටල සමඟ වැඩ කරන විට, GROUP BY වාක්‍යයේ කාර්ය සාධනය අභිලේඛනය කිරීම ඉතා වැදගත් වේ. විශාල දත්ත ප්‍රමාණයක් කාර්යක්ෂමව සැකසීමට, නිසි වින්‍යාසය සහ විමසුම් අභිලේඛනය අවශ්‍ය වේ.



### 1. දර්ශක (Indexes) භාවිතය



GROUP BY වාක්‍යයේ භාවිතා වන තීරුවල දර්ශක (indexes) නිර්මාණය කිරීම දත්ත ලබා ගැනීම සහ කණ්ඩායම් කිරීමේ ක්‍රියාකාරකම් ඉතා වේගවත් කරයි.

CREATE INDEX idx_category ON sales(product_category);

දර්ශක (indexes) නිසි ලෙස භාවිතා කිරීම කාර්ය සාධනය විශාල ලෙස වැඩිදියුණු කරයි.



### 2. මතක සැකසුම් (Memory Settings) සකස් කිරීම



MySQL හි විශාල දත්ත කට්ටල සැකසීමේදී, මතක සැකසුම් අභිලේඛනය කිරීම අත්‍යවශ්‍ය වේ. `sort_buffer_size` සහ `tmp_table_size` නිසි ලෙස වින්‍යාස කිරීම විමසුම් කාර්ය සාධනය වැඩිදියුණු කරයි.

SET GLOBAL sort_buffer_size = 2M; SET GLOBAL tmp_table_size = 64M;

මතකයේ සැකසිය හැකි දත්ත ප්‍රමාණය වැඩි කිරීම තැටි ලිවීම් අඩු කරයි සහ සැකසුම් කාලය කෙටි කරයි.



### 3. විමසුම් සරල කිරීම



සංකීර්ණ විමසුම් කාර්ය සාධනය අඩු කරයි. JOIN හෝ උපවිමසුම් (subqueries) අධික ලෙස භාවිතා කිරීම ක්‍රියාත්මක කිරීම මන්දගාමී කරයි, එබැවින් විමසුම් හැකි තරම් සරලව තබා ගැනීම වැදගත් වේ. අවශ්‍ය නොවන තීරු හෝ කොන්දේසි ඉවත් කිරීම ක්‍රියාත්මක කාලය අඩු කරයි.



### 4. අනුවාද-නිර্ভර ලක්ෂණ (Version-Dependent Features)



MySQL 8.0 සිට, සාම්ප්‍රදායික sort-අධාරිත කණ්ඩායම් කිරීමේ අමතරව **hash-අධාරිත කණ්ඩායම් කිරීම** ලබා ගත හැක. Hash-අධාරිත සැකසීම සාමාන්‍යයෙන් sort-අධාරිත ක්‍රමවලට වඩා වේගවත් වන අතර, විශාල දත්ත කට්ටල සැකසීමේදී කාර්ය සාධනය විශාල ලෙස වැඩිදියුණු කරයි.

SET optimizer_switch = ‘hash_join=on’;

### 5. විමසුම් කෑෂ් (Query Cache) භාවිතය



ඔබ MySQL 5.7 හෝ එයට පෙර භාවිතා කරන්නේ නම්, විමසුම් කෑෂ් සක්‍රිය කිරීම එකම විමසුම නැවත නැවත ක්‍රියාත්මක කරන විට කාර්ය සාධනය වැඩිදියුණු කරයි.

SET GLOBAL query_cache_size = 16M; SET GLOBAL query_cache_type = 1;

### 6. පාර්ශවීකරණය (Partitioning) ගැන සිතීම



MySQL හි **partitioning** (පාර්ශවීකරණ) ලක්ෂණය භාවිතා කිරීම ඔබට විශාල දත්ත ගබඩා භෞතිකව බහු කොටස් ලෙස බෙදීමට ඉඩ දෙයි, එය විමසුම් කාර්ය සාධනය වැඩිදියුණු කරයි.

ALTER TABLE sales PARTITION BY RANGE (YEAR(sale_date)) ( PARTITION p0 VALUES LESS THAN (2021), PARTITION p1 VALUES LESS THAN (2022), PARTITION p2 VALUES LESS THAN (2023) ); “`

9. සාරාංශය: GROUP BY හි ප්‍රභාවී භාවිතය

GROUP BY වාක්‍යය දත්ත කණ්ඩායම් කිරීම සහ ඒකක කිරීම සඳහා ඉතා ප්‍රයෝජනවත් SQL ප්‍රකාශයක් වේ. මෙම ලිපියේ, අපි GROUP BY හි මූලික භාවිතය සිට HAVING සහ ORDER BY වාක්‍ය සමඟ ඒකතු කිරීම, එසේම WITH ROLLUP වැනි උසස් ඒකක කිරීමේ ලක්ෂණ භාවිතය දක්වා සියල්ල ආවරණය කළෙමු.

අපි විශාල දත්ත කට්ටල සැකසීම සඳහා කාර්ය සාධන අභිලේඛන තාක්ෂණ, දර්ශක (indexes) භාවිතය, මතක වින්‍යාස සැකසීම, සහ hash-අධාරිත කණ්ඩායම් කිරීම වැනි අනුවාද-විශේෂ MySQL ලක්ෂණ භාවිතය යනාදියත් පරීක්ෂා කළෙමු. මෙමย්ุතිකයන් අවබෝධ කර ගැනීම ඔබට විශාල දත්ත ප්‍රමාණ සමඟ වැඩ කරන විට විමසුම් කාර්ය සාධනය විශාල ලෙස වැඩිදියුණු කිරීමට ඉඩ සලසයි.

අමතරව, අපි MySQL හි උසස් විශේෂාංග පිළිබඳ සාකච්ඡා කළෙමු, එනම් විමසුම් සංරක්ෂණය සහ විභාගීකරණය වැනි, මහා පරිමාණ දත්ත සැකසුම් කාර්යක්ෂමතාව තවදුරටත් වැඩිදියුණු කිරීම සඳහා. වර්ෂණ-විශේෂිත විශේෂාංග සහ සැකසුම් නිවැරදිව භාවිතා කිරීමෙන්, ඔබට ඔබේ ව්‍යාපාර පරිසරයේ දත්ත විශ්ලේෂණය සරල කළ හැකිය.