Complex Query Examples
Scénarios réels pour le comptage avancé
1. Comptage conditionnel sur plusieurs tables
SELECT
d.department_name,
COUNT(CASE WHEN e.performance_rating > 4 THEN 1 END) AS high_performers,
COUNT(CASE WHEN e.salary > (SELECT AVG(salary) FROM employees) THEN 1 END) AS above_avg_salary
FROM
departments d
LEFT JOIN
employees e ON d.department_id = e.department_id
GROUP BY
d.department_name;
Comptage conditionnel imbriqué
2. Comptage hiérarchique avec sous-requêtes
SELECT
project_id,
project_name,
(SELECT COUNT(*)
FROM tasks
WHERE tasks.project_id = projects.id AND status = 'Completed') AS completed_tasks,
(SELECT COUNT(*)
FROM tasks
WHERE tasks.project_id = projects.id AND status = 'In Progress') AS ongoing_tasks
FROM
projects;
Techniques d'agrégation complexes
3. Comptage conditionnel basé sur le temps
SELECT
YEAR(hire_date) AS hire_year,
COUNT(CASE WHEN age < 30 THEN 1 END) AS young_employees,
COUNT(CASE WHEN age BETWEEN 30 AND 45 THEN 1 END) AS mid_career_employees,
COUNT(CASE WHEN age > 45 THEN 1 END) AS senior_employees
FROM
employees
GROUP BY
YEAR(hire_date)
ORDER BY
hire_year;
Analyse de la complexité des requêtes
| Niveau de complexité |
Caractéristiques |
Impact sur les performances |
| Simple |
Conditions WHERE de base |
Minime |
| Modéré |
Plusieurs instructions CASE |
Modéré |
| Complexe |
Sous-requêtes, plusieurs jointures |
Important |
Flux de comptage conditionnel
graph TD
A[Start Complex Counting] --> B{Query Type}
B --> |Multi-Table| C[Join and Aggregate]
B --> |Nested Conditions| D[Subquery Counting]
B --> |Time-Based Analysis| E[Temporal Grouping]
C --> F[Apply Conditions]
D --> F
E --> F
F --> G[Generate Result Set]
Stratégies d'optimisation avancées
- Utilisez des colonnes indexées dans la logique conditionnelle
- Minimisez la complexité des sous-requêtes
- Exploitez les vues matérialisées pour les requêtes complexes répétitives
Défis courants dans le comptage complexe
- Gérer les performances des requêtes
- Gérer les valeurs NULL
- Équilibrer la lisibilité et l'efficacité
LabEx recommande une approche progressive pour maîtriser les techniques de comptage complexes en MySQL, en commençant par des requêtes simples et en ajoutant progressivement de la complexité.