MySQL COUNT(DISTINCT) පැහැදිලි කිරීම: අද්විතීය අගයන් කාර්යක්ෂමව ගණනය කිරීමේ ක්‍රමය

目次

1. හැඳින්වීම

දත්ත සමුදායක් කළමනාකරණය කිරීමේදී, “බඩුල් කොපමණ විවිධ රටවල් ලියාපදිංචි කර ඇත්ද?” හෝ “අනන්‍ය ඊමේල් ලිපින කොපමණ තිබේද?” වැනි තත්ත්වයන්ට මුහුණ දීමට සිදුවිය හැක.
එවැනි අවස්ථාවලදී, ඔබට MySQL’s COUNT(DISTINCT column_name) භාවිතා කරමින්, ආදර්ශනයන් ඉවත් කරමින් වාර්තා සංඛ්‍යාව ලබා ගත හැක.

මෙම ලිපිය පහත විෂයන් විස්තරාත්මකව පැහැදිලි කරයි:

  • COUNT() සහ DISTINCT හි මූලික සංකල්ප
  • COUNT(DISTINCT column_name) හි නිවැරදි භාවිතය
  • බහු කොටුවලට තර්කානුකූල වූ අනන්‍ය වටිනාකම් ගණනය කිරීම
  • COUNT(DISTINCT) හි කාර්ය සාධනය වැඩිදියුණු කිරීම

මෙම මාර්ගෝපදේශය ආරම්භකයින්ට පවා පහසුවෙන් තේරුම් ගත හැකි වන්නේ, අපි සියල්ල ප්‍රායෝගික උදාහරණ සහ SQL ප්‍රශ්න මගින් පැහැදිලි කරන බැවිනි. අවසානය දක්වා කියවීමට වග බලා ගන්න.

2. MySQL හි දත්ත ගණනය කිරීමේ මූලික සංකල්ප (COUNT)

දත්ත සමුදායක දත්ත විශ්ලේෂණය කිරීමේදී, වඩාත් මූලික ක්‍රියාකාරීත්වය වන්නේ COUNT() ය.
පළමුව COUNT() ක්‍රියා කරන ආකාරය තේරුම් ගනිමු.

2.1 COUNT(*) සහ COUNT(column_name) අතර වෙනස

MySQL හි COUNT() ක්‍රියාකාරීත්වය පහත දෙවන ආකාරවලින් භාවිතා කළ හැක:

COUNT FunctionDescription
COUNT(*)Counts all records in the table (including NULL values)
COUNT(column_name)Counts non-NULL values in a specific column

2.2 මූලික COUNT() උදාහරණ

මෙහිදී, අපි පහත users වගුව උදාහරණයක් ලෙස භාවිතා කරමු:

idnameemailcountry
1Tarotaro@example.comJapan
2Hanakohanako@example.comJapan
3JohnNULLUnited States
4Tanakatanaka@example.comJapan

① වගුවේ මුළු වාර්තා සංඛ්‍යාව ලබා ගැනීම

SELECT COUNT(*) FROM users;

→ ප්‍රතිඵලය: 4 (මුළු වාර්තා සංඛ්‍යාව)

② නිශ්චිත කොටුවක Non-NULL වටිනාකම් සංඛ්‍යාව ලබා ගැනීම

SELECT COUNT(email) FROM users;

→ ප්‍රතිඵලය: 3 (non-NULL email වටිනාකම් සංඛ්‍යාව)

💡 ප්‍රධාන කරුණු:

  • COUNT(*) මුළු වාර්තා සංඛ්‍යාව NULL වටිනාකම් ඇතුළුව ලබා ගනී .
  • COUNT(email) ගණනය කිරීමේදී NULL වටිනාකම් ඉවත් කරයි.

3. ආදර්ශනයන් නොමැතිව දත්ත ලබා ගැනීම (DISTINCT)

දත්ත එකතුවීමේදී, අනන්‍ය වටිනාකම් පමණක් ලබා ගැනීමට ඔබට අවශ්‍ය බොහෝ අවස්ථා තිබේ.
එවැනි තත්ත්වයන්හිදී, DISTINCT ඉතා ගුණදායක වේ.

3.1 DISTINCT හි මූලික සංකල්ප

DISTINCT නිශ්චිත කොටුවෙන් ආදර්ශන දත්ත ඉවත් කර අනන්‍ය ප්‍රතිඵල ලබා දීමට භාවිතා වේ.

මූලික ව්‍යාකරණය

SELECT DISTINCT column_name FROM table_name;

3.2 DISTINCT භාවිතා කිරීමේ උදාහරණය

පහත SQL ප්‍රශ්නය ක්‍රියාත්මක කිරීමෙන්, පරිශීලකයින් විසින් ලියාපදිංචි කර ඇති අනන්‍ය රට්‍ර නම් ලැයිස්තුවක් ලබා ගත හැක.

SELECT DISTINCT country FROM users;

→ ප්‍රතිඵලය:

country
Japan
United States

3.3 DISTINCT සහ GROUP BY අතර වෙනස

FeatureDISTINCTGROUP BY
PurposeRetrieve unique valuesPerform aggregation by group
UsageSELECT DISTINCT column_nameSELECT column_name, COUNT(*) GROUP BY column_name
ExampleRetrieve unique countriesCount users per country

💡 ප්‍රධාන කරුණු:

  • DISTINCT තුලින් ආදර්ශන දත්ත ඉවත් කරයි පමණයි .
  • GROUP BY දත්ත ගණනය කර එකතු ක්‍රියාකාරීත්ව සමඟ භාවිතා වේ .

4. COUNT(DISTINCT column_name) භාවිතා කිරීම

COUNT(DISTINCT column_name) භාවිතා කිරීමෙන්, ඔබට අනන්‍ය වටිනාකම් සංඛ්‍යාව ලබා ගත හැක.

4.1 COUNT(DISTINCT) හි මූලික සංකල්ප

මූලික ව්‍යාකරණය

SELECT COUNT(DISTINCT column_name) FROM table_name;

4.2 COUNT(DISTINCT) හි උදාහරණය

SELECT COUNT(DISTINCT country) FROM users;

→ ප්‍රතිඵලය: 2 (“Japan” සහ “United States” යන දෙවර්ගය)

4.3 COUNT(DISTINCT) හි තත්ත්ව සමඟ භාවිතා කිරීම

SELECT COUNT(DISTINCT email) FROM users WHERE country = 'Japan';

→ ප්‍රතිඵලය: 2 (ජපානයේ ලියාපදිංචි කර ඇති අනන්‍ය email වටිනාකම් සංඛ්‍යාව)

💡 ප්‍රධාන කරුණු:

  • COUNT(DISTINCT column_name) NULL වටිනාකම් ඉවත් කර අනන්‍ය දත්ත පමණක් ගණනය කරයි.
  • WHERE කොටුවක් භාවිතා කිරීමෙන්, ඔබට නිශ්චිත තත්ත්වයන් සපුරාලන වාර්තා ගණනය කළ හැකියි .

5. බහු කොටු සමඟ COUNT(DISTINCT) භාවිතා කිරීම

MySQL හි, COUNT(DISTINCT column1, column2) සෘජුව භාවිතා කළ නොහැකියි. ඒ වෙනුවට, සුලබ විසඳුමක් වන්නේ CONCAT() භාවිතා කර කොටු ඒකාබද්ධ කිරීම සහ ඒවා තනි වටිනාකමක් ලෙස සැලකීම ය.

5.1 COUNT(DISTINCT column1, column2) භාවිතා කළ නොහැකි හේතුව

MySQL හි, ඔබට COUNT(DISTINCT column1, column2) මෙන් බහු කොටුවලට COUNT(DISTINCT) සෘජුව භාවිතා කළ නොහැක.
මෙය MySQL හි සීමාවක් නිසා ය.

5.2 බහු කොටුවලට තර්කානුකූල අනන්‍ය සංයෝජන ගණනය කිරීම

To count unique combinations of multiple columns, the typical approach is to combine the columns using CONCAT() and then apply COUNT(DISTINCT) to the result.

උදාහරණය: රට සහ නගරයේ අද්විතීය සංයෝජන ගණනය කිරීම

SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;

💡 ප්‍රධාන කරුණු:

  • CONCAT(column1, '-', column2) භාවිතා කිරීමෙන් බහු තීරුවල එකම අද්විතීය අගයක් ලෙස එකතු කළ හැක .
  • COUNT(DISTINCT CONCAT(...)) මගින් බහු තීරුවල අද්විතීය සංයෝජන ගණන ලබා ගත හැක .

6. COUNT(DISTINCT) සඳහා දක්ෂතා සැකසීම

COUNT(DISTINCT) ක්‍රියාකාරිත්වයට බලපායි, එබැවින් සුදුසුකම් අවශ්‍ය විය හැක.
විශාල දත්ත කට්ටල සමඟ වැඩ කරන විට, ඉන්ඩෙක්ස් භාවිතා කිරීම හෝ විකල්ප ක්‍රම ගැන සලකා බැලීමට නිර්දේශ කරයි.

6.1 COUNT(DISTINCT) මන්ද මන්දගාමී විය හැකිද

  • MySQL සාමාන්‍යයෙන් DISTINCT යෙදීමට සියලු රෙකෝඩ් පරීක්ෂා කරයි .
  • ඉන්ඩෙක්ස් නිසි ලෙස සකස් නොකළහොත්, විමසුම් ක්‍රියාත්මක කිරීම මන්දගාමී වේ .
  • අතිරේක දත්ත ප්‍රමාණය වැඩි වීමෙන් ගණනකරණ බර වැඩි වේ .

6.2 COUNT(DISTINCT) වේගවත් කිරීම සඳහා ඉන්ඩෙක්ස් සුදුසුකම්

විශාල දත්ත ප්‍රමාණයක් සමඟ කටයුතු කරන විට, ඉලක්ක තීරුවට ඉන්ඩෙක්ස් එකතු කිරීමෙන් විමසුම් ක්‍රියාකාරිත්වය වැඩිදියුණු කළ හැක .

ඉන්ඩෙක්ස් එකතු කිරීමේ ක්‍රමය

ALTER TABLE users ADD INDEX (country);

ඉන්ඩෙක්ස් භාවිතා කර විමසුම් ක්‍රියාත්මක සැලැස්ම පරීක්ෂා කිරීම

EXPLAIN SELECT COUNT(DISTINCT country) FROM users;

💡 ප්‍රධාන කරුණු:

  • EXPLAIN භාවිතා කිරීමෙන් MySQL විමසුමක් කෙසේ සැකසෙයිදැයි පරීක්ෂා කළ හැක.
  • ඉන්ඩෙක්ස් යෙදීම සම්පූර්ණ වගුව පරීක්ෂා කිරීම වැළැක්වීමට සහ සෙවීමේ ක්‍රියාකාරිත්වය වැඩිදියුණු කිරීමට උපකාරී වේ.

6.3 විකල්ප ක්‍රමය: GROUP BY + COUNT

එකතු කිරීමේ අවශ්‍යතාවය අනුව, GROUP BY භාවිතා කිරීම වැඩි දක්ෂතාවයක් ලබා දිය හැක.

උදාහරණය: GROUP BY භාවිතා කර අද්විතීය දත්ත ගණනය කිරීම

SELECT country, COUNT(*) FROM users GROUP BY country;

💡 ප්‍රධාන කරුණු:

  • GROUP BY සමහර අවස්ථා වල COUNT(DISTINCT) ට වඩා වැඩි දක්ෂතාවයක් ලබා දිය හැක.
  • ඔබට දත්ත සමූහගත කිරීම සහ එකතු කිරීම එකවර අවශ්‍ය වන විට මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

7. COUNT(DISTINCT) සඳහා පොදු දෝෂ සහ විසඳුම්

COUNT(DISTINCT) භාවිතා කරන විට, ඔබට පොදු දෝෂ කිහිපයක් මුහුණ දිය හැක.
මෙහි, සාමාන්‍ය ගැටළු සහ ඒවායේ විසඳුම් ඉදිරිපත් කරමු.

7.1 දෝෂය 1: COUNT(DISTINCT column1, column2) භාවිතා කළ නොහැක

දෝෂයේ හේතුව

MySQL හි, බහු තීරුවලට COUNT(DISTINCT column1, column2) සහය නොදේ.
මෙම වාක්‍ය රීතිය සෘජුව භාවිතා කිරීමෙන් දෝෂයක් සිදුවේ.

විසඳුම: CONCAT() භාවිතා කරන්න

බහු තීරුවල එකතු කර COUNT(DISTINCT) ප්‍රතිඵලයට යෙදීමෙන් මෙම දෝෂය වැළැක්විය හැක.

SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;

💡 ප්‍රධාන කරුණු:

  • CONCAT(column1, '-', column2) භාවිතා කිරීමෙන් බහු තීරුවලින් අද්විතීය අගයන් නිර්මාණය කළ හැක .
  • COUNT(DISTINCT CONCAT(...)) මගින් සෑම සංයෝජනයක් සඳහාම අද්විතීය අගයන් ලබා ගත හැක .

7.2 දෝෂය 2: NULL අගයන් ඇතුළත් වූ විට අනපේක්ෂිත ප්‍රතිඵල

දෝෂයේ හේතුව

  • COUNT(DISTINCT column_name) NULL අගයන් නොසලකා හරියයි, එම නිසා තීරුවේ NULL අගයන් ඇත්නම් අනපේක්ෂිත ප්‍රතිඵල ඇති විය හැක.

විසඳුම: IFNULL() භාවිතා කරන්න

NULL අගය වෙනුවට වෙනත් පෙරනිමි අගයක් (උදා: '' හෝ 'unknown') භාවිතා කර ගණනය නිවැරදිව සිදු කළ හැක.

SELECT COUNT(DISTINCT IFNULL(email, 'unknown')) FROM users;

💡 ප්‍රධාන කරුණු:

  • IFNULL(column_name, 'default_value') භාවිතා කිරීමෙන් NULL අගයන් නිසි ලෙස සැකසිය හැක .

7.3 දෝෂය 3: COUNT(DISTINCT) මන්දගාමී වේ

දෝෂයේ හේතුව

  • COUNT(DISTINCT) සියලු දත්ත පරීක්ෂා කරයි, විශාල දත්ත කට්ටල වලදී මන්දගාමී ක්‍රියාකාරිත්වයක් ඇති විය හැක.

විසඳුම: ඉන්ඩෙක්ස් භාවිතා කරන්න

ALTER TABLE users ADD INDEX (country);

💡 ප්‍රධාන කරුණු:

  • ඉන්ඩෙක්ස් එකතු කිරීමෙන් විමසුම් ක්‍රියාකාරිත්වය වැඩිදියුණු විය හැක .
  • EXPLAIN භාවිතා කර විමසුම් සුදුසුකම් තත්ත්වය පරීක්ෂා කරන්න.
    EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
    

By applying these measures, you can enhance the practicality of COUNT(DISTINCT) and avoid performance issues.

8. නිතර අසන ප්‍රශ්න (FAQ)

COUNT(DISTINCT) සම්බන්ධ නිතර අසන ප්‍රශ්න කිහිපයක් මෙහි ඇත.

8.1 COUNT(*) සහ COUNT(DISTINCT column_name) අතර වෙනස කුමක්ද?

ප්‍රධාන වෙනස්කම්

FunctionDescription
COUNT(*)Counts all records (including NULL values)
COUNT(DISTINCT column_name)Counts unique values (excluding NULL values)

උදාහරණ භාවිතය

SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT email) FROM users;

💡 ප්‍රධාන කරුණු:

  • COUNT(*) සියලු රෙකෝඩ් ගණන ගනී .
  • COUNT(DISTINCT column_name) අනන්‍ය අගයන්ගේ සංඛ්‍යාව (NULL ඉවත් කර) ලබා ගනී .

8.2 DISTINCT සහ GROUP BY අතර වෙනස කුමක්ද?

FeatureDISTINCTGROUP BY
PurposeRetrieve unique valuesPerform aggregation by group
UsageSELECT DISTINCT column_nameSELECT column_name, COUNT(*) GROUP BY column_name
ExampleRetrieve unique countriesCount users per country

උදාහරණ භාවිතය

-- Using DISTINCT
SELECT DISTINCT country FROM users;

-- Using GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;

💡 ප්‍රධාන කරුණු:

  • DISTINCT සරලව අනුපිළිවෙළ දත්ත ඉවත් කරයි .
  • GROUP BY දත්ත කණ්ඩායම් කරයි සහ එකතු කිරීමේ ක්‍රියාකාරකම් සමඟ එකතු කළ හැක .

8.3 COUNT(DISTINCT) මන්දගාමීද?

ගැටලුව

  • COUNT(DISTINCT) සියලු දත්ත පරික්ෂා කරයි , එබැවින් විශාල දත්ත කට්ටල වල කාර්ය සාධනය අඩුවිය හැක.

විසඳුම: ඉන්ඩෙක්ස් භාවිතා කරන්න

ALTER TABLE users ADD INDEX (country);

විකල්ප ක්‍රමය: GROUP BY භාවිතා කරන්න

SELECT country, COUNT(*) FROM users GROUP BY country;

💡 ප්‍රධාන කරුණු:

  • ඉන්ඩෙක්ස් යෙදීම සෙවීමේ කාර්ය සාධනය වැඩිදියුණු කරයි .
  • GROUP BY භාවිතා කිරීම සමහර අවස්ථා වල COUNT(DISTINCT) ට වඩා වේගවත් ප්‍රතිඵල ලබා දිය හැක.

8.4 COUNT(DISTINCT column1, column2) කෙසේ භාවිතා කළ හැකිද?

ගැටලුව

  • MySQL හි, COUNT(DISTINCT column1, column2) සහය නොදේ .

විසඳුම: CONCAT() භාවිතා කරන්න

SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;

💡 ප්‍රධාන කරුණු:

  • CONCAT(column1, '-', column2) භාවිතා කිරීමෙන් ඔබට බහු තීරුවල අනිත්‍ය අගයන් නිර්මාණය කළ හැක .
  • COUNT(DISTINCT CONCAT(...)) ඔබට අනිත්‍ය සංයෝජන ලබා ගැනීමට ඉඩ සලසයි .

මෙම ප්‍රශ්න වෙත යොමු වීමෙන්, ඔබට COUNT(DISTINCT) වැඩි කාර්යක්ෂමතාවෙන් භාවිතා කළ හැක.

9. නිගමනය

මෙම ලිපියේ, MySQL හි COUNT(DISTINCT) ක්‍රියාකාරකම කෙසේ භාවිතා කරන්නේ යැයි විස්තරාත්මකව පැහැදිළි කළෙමු. ප්‍රධාන ග්‍රහණයන් සමාලෝචනය කරමු.

9.1 ඔබ මෙම ලිපියෙන් ඉගෙන ගත් දේ

MySQL හි රෙකෝඩ් ගණන කිරීමේ ක්‍රමය

  • COUNT(*) සමස්ත රෙකෝඩ් සංඛ්‍යාව ලබා ගනී
  • COUNT(column_name) NULL ඉවත් කර අගයන් ගනී
  • COUNT(DISTINCT column_name) අනිත්‍ය අගයන්ගේ සංඛ්‍යාව ලබා ගනී

DISTINCT සහ COUNT(DISTINCT) අතර වෙනස

  • DISTINCT අනුපිළිවෙළ ඉවත් කර දත්ත ලබා ගනී
  • COUNT(DISTINCT column_name) අනිත්‍ය අගයන්ගේ ගණන ගනී

බහු තීරුවල COUNT(DISTINCT) භාවිතා කිරීමේ ක්‍රමය

  • MySQL සෘජුව COUNT(DISTINCT column1, column2) සහය නොදෙයි, එබැවින් CONCAT() භාවිතා කරන්න

කාර්ය සාධන අභිලක්ෂණ තාක්ෂණ

  • ඉන්ඩෙක්ස් යෙදීම සෙවීමේ කාර්ය සාධනය වැඩිදියුණු කරයි
  • අවශ්‍ය විට GROUP BY + COUNT භාවිතා කිරීමෙන් වේගවත් විමසුම් ලබා ගත හැක

9.2 ඔබට මෙම දැනුමෙන් කළ හැකි දේ

මෙම දැනුම අනුගමනය කිරීමෙන්, ඔබට පහත සඳහන් දත්ත එකතු කිරීමේ ක්‍රියා කළ හැක: 🔹 අනිත්‍ය පරිශීලකයන් ගණන 🔹 විශේෂිත කොන්දේසි මත රෙකෝඩ් ගණන ලබා ගැනීම 🔹 බහු තීරුවල අනිත්‍ය දත්ත ගණන 🔹 විශාල දත්ත කට්ටල සඳහා විමසුම් අභිලක්ෂණ

MySQL හි දත්ත එකතු කිරීම සහ අභිලක්ෂණ කිරීම සිදු කරන විට, මෙම මාර්ගෝපදේශය යොමු කරගන්න!