- 1 1. Úvod
- 2 2. Základy počítání dat v MySQL (COUNT)
- 3 3. Získávání dat bez duplicit (DISTINCT)
- 4 4. Jak používat COUNT(DISTINCT column_name)
- 5 5. Použití COUNT(DISTINCT) s více sloupci
- 6 6. Performance Tuning for COUNT(DISTINCT)
- 7 7. Common Errors and Solutions for COUNT(DISTINCT)
- 8 8. Frequently Asked Questions (FAQ)
- 9 9. Conclusion
1. Úvod
Při správě databáze se můžete setkat se situacemi, jako je „Kolik různých zemí bylo zaregistrováno?“ nebo „Kolik unikátních e-mailových adres existuje?“
V takových případech můžete použít MySQL COUNT(DISTINCT column_name) k získání počtu záznamů při eliminaci duplicit.
Tento článek podrobně vysvětluje následující témata:
- Základy
COUNT()aDISTINCT - Správné použití
COUNT(DISTINCT column_name) - Jak počítat unikátní hodnoty napříč více sloupci
- Jak zlepšit výkon
COUNT(DISTINCT)
I začátečníci mohou tento průvodce snadno pochopit, protože všechno vysvětlujeme pomocí praktických příkladů a SQL dotazů. Určitě si přečtěte až do konce.
2. Základy počítání dat v MySQL (COUNT)
Při analýze dat v databázi je nejdůležitější funkcí COUNT().
Nejprve si vysvětlíme, jak COUNT() funguje.
2.1 Rozdíl mezi COUNT(*) a COUNT(column_name)
Funkce COUNT() v MySQL lze použít následujícími dvěma způsoby:
| COUNT Function | Description |
|---|---|
COUNT(*) | Counts all records in the table (including NULL values) |
COUNT(column_name) | Counts non-NULL values in a specific column |
2.2 Základní příklady COUNT()
Zde použijeme následující tabulku users jako příklad:
| id | name | country | |
|---|---|---|---|
| 1 | Taro | taro@example.com | Japan |
| 2 | Hanako | hanako@example.com | Japan |
| 3 | John | NULL | United States |
| 4 | Tanaka | tanaka@example.com | Japan |
① Získat celkový počet záznamů v tabulce
SELECT COUNT(*) FROM users;
→ Výsledek: 4 (Celkový počet záznamů)
② Získat počet ne-NULL hodnot v konkrétním sloupci
SELECT COUNT(email) FROM users;
→ Výsledek: 3 (Počet ne-NULL hodnot email)
💡 Klíčové body:
COUNT(*)získává celkový počet záznamů včetně NULL hodnot .COUNT(email)vylučuje NULL hodnoty při počítání.

3. Získávání dat bez duplicit (DISTINCT)
Při agregaci dat je mnoho případů, kdy chcete získat pouze unikátní hodnoty.
V takových situacích je DISTINCT velmi užitečný.
3.1 Základy DISTINCT
DISTINCT se používá k eliminaci duplicitních dat ze zadaného sloupce a vrácení unikátních výsledků.
Základní syntaxe
SELECT DISTINCT column_name FROM table_name;
3.2 Příklad použití DISTINCT
Spuštěním následujícího SQL dotazu můžete získat seznam unikátních názvů zemí zaregistrovaných uživateli.
SELECT DISTINCT country FROM users;
→ Výsledek:
| country |
|---|
| Japan |
| United States |
3.3 Rozdíl mezi DISTINCT a GROUP BY
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
💡 Klíčové body:
DISTINCTjednoduše odstraňuje duplicitní data .GROUP BYskupinuje data a používá se společně s agregačními funkcemi .
4. Jak používat COUNT(DISTINCT column_name)
Pomocí COUNT(DISTINCT column_name) můžete získat počet unikátních hodnot.
4.1 Základy COUNT(DISTINCT)
Základní syntaxe
SELECT COUNT(DISTINCT column_name) FROM table_name;
4.2 Příklad COUNT(DISTINCT)
SELECT COUNT(DISTINCT country) FROM users;
→ Výsledek: 2 (Dva typy: „Japonsko“ a „Spojené státy“)
4.3 Použití COUNT(DISTINCT) s podmínkami
SELECT COUNT(DISTINCT email) FROM users WHERE country = 'Japan';
→ Výsledek: 2 (Počet unikátních hodnot email zaregistrovaných v Japonsku)
💡 Klíčové body:
COUNT(DISTINCT column_name)vylučuje NULL hodnoty a počítá pouze unikátní data.- Pomocí klauzule
WHEREmůžete počítat záznamy, které splňují specifické podmínky .
5. Použití COUNT(DISTINCT) s více sloupci
V MySQL nelze COUNT(DISTINCT column1, column2) použít přímo. Místo toho je běžným řešením kombinovat sloupce pomocí CONCAT() a traktovat je jako jednu hodnotu.
5.1 Proč nelze použít COUNT(DISTINCT column1, column2)
V MySQL nelze přímo aplikovat COUNT(DISTINCT) na více sloupců takto: COUNT(DISTINCT column1, column2).
To je způsobeno omezením v MySQL.
5.2 Jak počítat unikátní kombinace napříč více sloupci
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.
Example: Count Unique Combinations of Country and City
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Key Points:
- Using
CONCAT(column1, '-', column2)allows you to combine multiple columns into a single unique value . COUNT(DISTINCT CONCAT(...))enables you to retrieve the number of unique combinations across multiple columns .
6. Performance Tuning for COUNT(DISTINCT)
COUNT(DISTINCT) can impact performance, so optimization may be necessary.
When working with large datasets, it is recommended to consider using indexes or alternative approaches.
6.1 Why COUNT(DISTINCT) Can Be Slow
- MySQL often scans all records to apply
DISTINCT. - If indexes are not properly configured, query execution becomes slower .
- A high volume of duplicate data increases computational load .
6.2 Index Optimization to Speed Up COUNT(DISTINCT)
When handling large amounts of data, you can improve query performance by adding an index to the target column.
How to Add an Index
ALTER TABLE users ADD INDEX (country);
Check the Query Execution Plan Using an Index
EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
💡 Key Points:
- Using
EXPLAINallows you to check how MySQL processes a query. - Applying an index may help avoid full table scans and improve search performance .
6.3 Alternative Method: GROUP BY + COUNT
Depending on the aggregation requirement, using GROUP BY may provide better performance.
Example: Count Unique Data Using GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Key Points:
GROUP BYmay offer better performance compared toCOUNT(DISTINCT)in some cases.- It is especially useful when you need to group and aggregate data simultaneously .
7. Common Errors and Solutions for COUNT(DISTINCT)
When using COUNT(DISTINCT), you may encounter several common errors.
Here, we introduce typical issues and their solutions.
7.1 Error 1: COUNT(DISTINCT column1, column2) Cannot Be Used
Cause of the Error
In MySQL, COUNT(DISTINCT column1, column2) is not supported when targeting multiple columns.
Using this syntax directly will result in an error.
Solution: Use CONCAT()
You can avoid this error by combining multiple columns and applying COUNT(DISTINCT) to the result.
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Key Points:
- Using
CONCAT(column1, '-', column2)allows you to create unique values from multiple columns . COUNT(DISTINCT CONCAT(...))enables you to retrieve unique values for each combination .
7.2 Error 2: Unexpected Results When NULL Values Are Included
Cause of the Error
COUNT(DISTINCT column_name)ignores NULL values , which may cause unexpected results if the column contains NULLs.
Solution: Use IFNULL()
You can replace NULL with another default value (e.g., '' or 'unknown') to ensure proper counting.
SELECT COUNT(DISTINCT IFNULL(email, 'unknown')) FROM users;
💡 Key Points:
- By using
IFNULL(column_name, 'default_value'), you can handle NULL values appropriately .
7.3 Error 3: COUNT(DISTINCT) Is Slow
Cause of the Error
COUNT(DISTINCT)scans all data , which can result in slow performance with large datasets.
Solution: Use Indexes
ALTER TABLE users ADD INDEX (country);
💡 Key Points:
- Adding indexes may improve query performance .
- Use
EXPLAINto check query optimization status.EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
By applying these measures, you can enhance the practicality of COUNT(DISTINCT) and avoid performance issues.
8. Frequently Asked Questions (FAQ)
Here are some frequently asked questions about COUNT(DISTINCT).
8.1 What Is the Difference Between COUNT(*) and COUNT(DISTINCT column_name)?
Key Differences
| Function | Description |
|---|---|
COUNT(*) | Counts all records (including NULL values) |
COUNT(DISTINCT column_name) | Counts unique values (excluding NULL values) |
Example Usage
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT email) FROM users;
💡 Key Points:
COUNT(*)counts all records .COUNT(DISTINCT column_name)retrieves the number of unique values (excluding NULL) .
8.2 What Is the Difference Between DISTINCT and GROUP BY?
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
Example Usage
-- Using DISTINCT
SELECT DISTINCT country FROM users;
-- Using GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Key Points:
DISTINCTsimply removes duplicate data .GROUP BYgroups data and can be combined with aggregate functions .
8.3 Is COUNT(DISTINCT) Slow?
Issue
COUNT(DISTINCT)scans all data , so performance may degrade with large datasets.
Solution: Use Indexes
ALTER TABLE users ADD INDEX (country);
Alternative Approach: Use GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Key Points:
- Applying indexes may improve search performance .
- Using
GROUP BYmay produce faster results thanCOUNT(DISTINCT)in some cases.
8.4 How Can I Use COUNT(DISTINCT column1, column2)?
Issue
- In MySQL,
COUNT(DISTINCT column1, column2)is not supported .
Solution: Use CONCAT()
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Key Points:
- Using
CONCAT(column1, '-', column2)allows you to create unique values across multiple columns . COUNT(DISTINCT CONCAT(...))enables you to retrieve unique combinations .
By referring to these questions, you can use COUNT(DISTINCT) more efficiently.
9. Conclusion
In this article, we explained in detail how to use MySQL’s COUNT(DISTINCT) function.
Let’s review the key takeaways.
9.1 What You Learned in This Article
✅ How to count records in MySQL
COUNT(*)retrieves the total number of recordsCOUNT(column_name)counts values excluding NULLCOUNT(DISTINCT column_name)retrieves the number of unique values
✅ The difference between DISTINCT and COUNT(DISTINCT)
DISTINCTretrieves data with duplicates removedCOUNT(DISTINCT column_name)counts the number of unique values
✅ How to use COUNT(DISTINCT) with multiple columns
- Since MySQL does not support
COUNT(DISTINCT column1, column2)directly, useCONCAT()instead
✅ Performance optimization techniques
- Apply indexes to improve search performance
- Use
GROUP BY + COUNTfor faster queries when appropriate
9.2 What You Can Do with This Knowledge
By applying this knowledge, you can perform the following types of data aggregation:
🔹 Count unique users
🔹 Retrieve record counts based on specific conditions
🔹 Count unique data across multiple columns
🔹 Optimize queries for large datasets
When performing data aggregation and optimization in MySQL, be sure to use this guide as a reference!


