Ejemplos de consultas complejas
Escenarios del mundo real para el conteo avanzado
1. Conteo condicional de múltiples tablas
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;
Conteo condicional anidado
2. Conteo jerárquico con subconsultas
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;
Técnicas de agregación complejas
3. Conteo condicional basado en el tiempo
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;
Análisis de la complejidad de las consultas
| Nivel de complejidad |
Características |
Impacto en el rendimiento |
| Simple |
Condiciones WHERE básicas |
Mínimo |
| Moderado |
Múltiples sentencias CASE |
Moderado |
| Complejo |
Subconsultas, múltiples joins |
Significativo |
Flujo del conteo condicional
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]
Estrategias de optimización avanzadas
- Utilizar columnas indexadas en la lógica condicional
- Minimizar la complejidad de las subconsultas
- Aprovechar las vistas materializadas para consultas complejas repetitivas
Desafíos comunes en el conteo complejo
- Gestionar el rendimiento de las consultas
- Manejar los valores NULL
- Equilibrar la legibilidad y la eficiencia
LabEx recomienda un enfoque incremental para dominar las técnicas de conteo complejas de MySQL, comenzando con consultas simples y agregando progresivamente complejidad.