20th Jul 2022 Lectura de 7 minutos ¿Quién tiene el salario más alto, según el departamento? ¡Utiliza SQL para averiguarlo! Himanshu Kathuria SQL aprender SQL agrupar por Índice El conjunto de datos de muestra ¿Qué es la agregación? La cláusula SQL GROUP BY Ejemplo de estructura de una consulta con una cláusula GROUP BY Columnas SELECT y función agregada FROM <tabla(s)> y WHERE <condiciones> Listado de las columnas para agrupar con un GROUP BY Condiciones en la función agregada utilizando una cláusula HAVING Ordenar con una cláusula ORDER BY ¿Listo para escribir su consulta SQL GROUP BY? Este artículo muestra cómoobtener el salario total por departamento de una organización, utilizando la funcionalidad GROUP BY de SQL. Explicamos la cláusula SQL GROUP BYen detalle junto con el filtrado condicional utilizando una cláusula HAVING. Comprender el gasto salarial de una organización es uno de los puntos de partida más comunes para los líderes empresariales. Les ayuda a ver quién en la organización tiene el mayor coste salarial total, por departamentos. También es posible que quieran ver la distribución de los pagos salariales para tener una mejor idea de la asignación de costes. En este artículo, voy a ilustrar cómo se puede utilizar el SQL GROUP BY para lograr esto. Si eres un profesional que puede utilizar este tipo de análisis, o si eres un estudiante que intenta comprender la funcionalidad de SQL GROUP BY a través de un caso de uso práctico, ¡sigue leyendo! Antes de resolver el problema, echemos un vistazo al conjunto de datos que utilizaremos. El conjunto de datos de muestra employees: employeenumberlastnamelevelannual_salarydepartment 1056Patterson1010000Finance 1076Firrel57000Marketing 1088Patterson1012500Finance 1102Bondur25000Human Resources 1143Bow25000Sales 1165Jennings25000Sales 1166Thompson1010000Marketing Arriba está la tabla employees con cinco columnas, con nombres de columna autoexplicativos. employeenumber: Identificador único del empleado. lastname: El apellido del empleado. level: El nivel del empleado en la jerarquía. annual_salary: La remuneración anual del empleado. department: El departamento del empleado. Ahora, digamos que quiere encontrar el salario anual total dado a los empleados que pertenecen a diferentes departamentos, como finanzas, marketing, recursos humanos y ventas. Este tipo de operación de datos se conoce como agregación. ¿Qué es la agregación? Dado que es difícil analizar cada fila por separado, especialmente cuando se trata de conjuntos de datos grandes, a menudo resulta útil agrupar datos similares para comprender algunas estadísticas de cada uno de esos grupos. Esto se conoce como agregación. Es posible que desee agrupar varios segmentos de clientes (agregación por segmento de clientes), calcular el tamaño medio de los pedidos, calcular las ventas totales por región (agregación por geografía) o comprobar el número total de artículos de varios vendedores en un sitio web (agregación por vendedor). Todos estos son ejemplos de agregación de datos que pueden ayudar a analizar los datos y a generar información. Así, en este caso, queremos agregar los empleados por departamento y, a continuación, calcular el salario total (es decir, la suma de los salarios) de todos los empleados que pertenecen a ese departamento. Puede pensar que puede hacerlo fácilmente para la tabla anterior sumando los salarios a mano. Pero seguramente necesitará una forma más rápida si tiene miles de empleados. Aquí es donde la cláusula SQL GROUP BY puede ayudarle. La cláusula SQL GROUP BY La cláusula SQL GROUP BY le ayuda a agregar los datos en grupos y luego calcular las estadísticas relacionadas con ese grupo. En nuestro caso, puede utilizar la siguiente consulta para calcular el salario total por departamento. Los comentarios explican brevemente la función de cada construcción en la consulta. Consulta: SELECT department, -- column to be returned SUM(annual_salary) -- aggregate function FROM employees -- table name GROUP BY department; -- column to use for grouping Salida: departmentSUM(annual_salary) Finance22500 Marketing17000 Sales10000 Human Resources5000 Para ayudarte a entenderlo mejor, déjame profundizar un poco más en la estructura de esta consulta y explicar cada cláusula o palabra clave utilizada. Ejemplo de estructura de una consulta con una cláusula GROUP BY Si tuviera que dibujar un esqueleto o estructura de muestra de una consulta SQL que utiliza una cláusula GROUP BY, se vería algo así. Puede que no uses todas las construcciones todo el tiempo, pero es útil entenderlas. Ejemplo de estructura: SELECT <columns>, <aggregate function> FROM <table name> WHERE <conditions> GROUP BY <columns> HAVING <aggregate condition> ORDER BY <columns> En nuestra consulta para encontrar el salario total por departamento, hemos utilizado sólo las cláusulas SELECT, FROM, y GROUP BY. Veamos cómo puede utilizar cada una de estas construcciones. Columnas SELECT y función agregada En esta parte de la consulta, se especifican las columnas que se van a agregar y devolver. Así, para el salario total por departamento, el departamento es una de las columnas a devolver. Aquí también se elige la función de agregación. La función de agregación es la métrica o estadística que desea calcular para la columna agrupada. En nuestro caso, SUM() es la función agregada. SQL también proporciona otras funciones de agregación incorporadas muy útiles. Echa un vistazo a esta tabla para ver varias funciones agregadas y un caso de uso de ejemplo para cada una. Aggregate FunctionExample Use Case SUM()Find the total salary by department COUNT()Find the number of employees in each department MAX()Find the highest salary paid in each department MIN()Find the lowest salary paid in each department AVG()Find the average salary for each department Para cambiar la estadística, todo lo que tiene que hacer es utilizar la función apropiada. Por ejemplo, si quiere calcular el salario medio, puede utilizar Consulta: SELECT department, AVG(annual_salary) FROM employees GROUP BY department; Salida: departmentAVG(annual_salary) Finance11250 Marketing8500 Sales5000 Human Resources5000 También puede utilizar varias funciones de agregación juntas. Por ejemplo: Consulta: SELECT department, AVG(annual_salary), SUM(annual_salary) FROM employees GROUP BY department; Salida: departmentAVG(annual_salary)SUM(annual_salary) Finance1125022500 Marketing850017000 Sales500010000 Human Resource50005000 FROM <tabla(s)> y WHERE <condiciones> En esta sección, especifica la(s) tabla(s) de la(s) que desea obtener las columnas y cualquier condición que desee aplicar a las columnas seleccionadas. Supongamos que quiere obtener los datos de sólo dos departamentos - marketing y ventas - de la tabla employees tabla. Consulta: SELECT department, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department; Resultado: departmentSUM(annual_salary) Marketing17000 Sales10000 Listado de las columnas para agrupar con un GROUP BY En esta parte de la consulta, se especifican las columnas que se quieren utilizar para agrupar los datos. Ya hemos visto la agrupación por departamento. Una cosa a tener en cuenta aquí: si está usando múltiples columnas en su sentencia SELECT, necesita incluirlas todas aquí en la cláusula GROUP BY, excepto la(s) columna(s) que está(n) siendo usada(s) por la(s) función(es) agregada(s). Si no lo hace, probablemente obtendrá un error. Consulte este artículo para conocer los errores más comunes con GROUP BY y cómo evitarlos. Así, por ejemplo, digamos que quiere SELECT y GROUP BY tanto el departamento como el nivel. La consulta se vería así Consulta: SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department, level; Salida: departmentlevelSUM(annual_salary) Marketing57000 Marketing1010000 Sales210000 Condiciones en la función agregada utilizando una cláusula HAVING Puede elegir refinar y filtrar la salida de una consulta con una función agregada utilizando una cláusula HAVING. Una cláusula HAVING evalúa la(s) condición(es) en la salida de una función agregada y devuelve las filas que satisfacen ese criterio. Así, si quiere encontrar todos los departamentos cuyo salario medio sea superior a 7000, puede utilizar la siguiente consulta. Consulta: SELECT department, SUM(annual_salary) FROM employees GROUP BY department HAVING AVG(annual_salary)>7000; Salida: departmentSUM(annual_salary) Finance22500 Marketing17000 Nota: No confunda la cláusula WHEREcon la cláusula HAVING. Mientras que una cláusula WHEREfiltra los registros de las tablas, una cláusula HAVINGfiltra los grupos. Ordenar con una cláusula ORDER BY Por último, puede ordenar los resultados utilizando una cláusula ORDER BY. Se puede utilizar para ordenar los resultados en orden ascendente o descendente. Para ordenar los departamentos en orden alfabético, puede utilizar la siguiente consulta. Consulta: SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’,’Human Resources’) GROUP BY department,level ORDER BY department asc; -- asc is used for ascending, desc for descending Resultado: departmentlevelSUM(annual_salary) Human Resource25000 Marketing57000 Marketing1010000 Sales210000 Para más ejemplos y casos de uso de la cláusula GROUP BY, consulte este artículo. ¿Listo para escribir su consulta SQL GROUP BY? Si has leído el artículo hasta aquí, estoy seguro de que estás listo para escribir tu consulta SQL GROUP BY para obtener el resultado deseado. He utilizado muchos ejemplos de consultas en este artículo para que te familiarices con el proceso de escribir consultas. Confía en mí - la práctica es la mejor manera de mejorar la escritura de consultas. Para practicar consultas como estas y otras, puedes consultar la pista Ejercicio de SQL de LearnSQL. Es una forma completa de perfeccionar tus habilidades. SQL es una herramienta muy poderosa, no sólo para la agregación de datos, sino también para muchos otros casos de uso que requieren el crujido y la manipulación de datos. De hecho, es una habilidad imprescindible no sólo para los analistas de datos, sino para cualquier persona que aspire a trabajar en un entorno en el que se tomen decisiones basadas en datos. Si eres nuevo en SQL y quieres aprender más sobre cómo escribir consultas SQL, te recomiendo encarecidamente el curso de LearnSQL para escribir consultas básicas. Te dará una base sólida para analizar los datos con SQL y aumentar tu carrera. Entonces, ¿a qué esperas? ¡Empieza hoy mismo! Tags: SQL aprender SQL agrupar por