Declaración SELECT: capacidades avanzadas. Uso de funciones de agregación SQL

Las siguientes subsecciones describen otras cláusulas de instrucción SELECT que se pueden usar en consultas, así como funciones agregadas y conjuntos de declaraciones. Como recordatorio, en este punto hemos analizado el uso de la cláusula WHERE, y en este artículo veremos las cláusulas GROUP BY, ORDER BY y HAVING, y brindaremos algunos ejemplos del uso de estas cláusulas en combinación con el agregado. funciones que son compatibles con Transact-SQL.

Cláusula GRUPO POR

Oferta Agrupar por agrupa un conjunto seleccionado de filas para producir un conjunto de filas de resumen por los valores de una o más columnas o expresiones. En el siguiente ejemplo se muestra un caso sencillo de uso de la cláusula GROUP BY:

UTILICE SampleDb; SELECCIONE Trabajo DE Works_On GRUPO POR Trabajo;

Este ejemplo selecciona y agrupa puestos de empleados.

En el ejemplo anterior, la cláusula GROUP BY crea un grupo separado para todos los valores posibles (incluido un valor NULL) para la columna Trabajo.

El uso de columnas en una cláusula GROUP BY debe cumplir ciertas condiciones. Específicamente, cada columna de la lista de selección de la consulta también debe aparecer en la cláusula GROUP BY. Este requisito no se aplica a constantes y columnas que forman parte de una función agregada. (Las funciones de agregación se tratan en la siguiente subsección). Esto tiene sentido porque Solo se garantiza que las columnas de la cláusula GROUP BY tengan un valor por grupo.

Puede agrupar una tabla por cualquier combinación de sus columnas. El siguiente ejemplo demuestra cómo agrupar las filas de la tabla Works_on en dos columnas:

UTILICE SampleDb; SELECCIONE Número de proyecto, Trabajo DE Works_On GRUPO POR Número de proyecto, Trabajo;

El resultado de esta consulta:

Según los resultados de la consulta, puede ver que hay nueve grupos con diferentes combinaciones de número de proyecto y posición. La secuencia de nombres de columnas en la cláusula GROUP BY no tiene que ser la misma que en la lista de columnas en SELECT.

Funciones agregadas

Las funciones agregadas se utilizan para obtener valores totales. Todas las funciones agregadas se pueden dividir en las siguientes categorías:

    funciones agregadas ordinarias;

    funciones agregadas estadísticas;

    funciones agregadas definidas por el usuario;

    funciones agregadas analíticas.

Aquí veremos los primeros tres tipos de funciones agregadas.

Funciones agregadas comunes

Transact-SQL admite las siguientes seis funciones agregadas: MÍNIMO, MÁXIMO, SUMA, AVG, CONTAR, COUNT_BIG.

Todas las funciones agregadas realizan cálculos sobre un único argumento, que puede ser una columna o una expresión. (La única excepción es la segunda forma de las dos funciones: COUNT y COUNT_BIG, es decir, COUNT(*) y COUNT_BIG(*), respectivamente). El resultado de cualquier cálculo de función agregada es un valor constante, que se muestra en una columna de resultados separada.

Las funciones agregadas se especifican en la lista de columnas de la instrucción SELECT, que también puede contener una cláusula GROUP BY. Si no hay una cláusula GROUP BY en la instrucción SELECT y la lista de columnas seleccionadas contiene al menos una función agregada, entonces no debe contener columnas simples (excepto las columnas que sirven como argumentos para la función agregada). Por lo tanto, el código del siguiente ejemplo es incorrecto:

UTILICE SampleDb; SELECCIONE Apellido, MIN(Id) DEL Empleado;

Aquí, la columna Apellido de la tabla Empleado no debe estar en la lista de selección de columnas porque no es un argumento para la función agregada. Por otro lado, la lista de selección de columnas puede contener nombres de columnas que no son argumentos para la función agregada si esas columnas son argumentos para la cláusula GROUP BY.

Un argumento de función agregada puede ir precedido de una de dos palabras clave posibles:

TODO

Especifica que los cálculos se realizan en todos los valores de la columna. Este es el valor predeterminado.

DISTINTO

Especifica que solo se utilizan valores de columna únicos para los cálculos.

Funciones agregadas MIN y MAX

Las funciones agregadas MIN y MAX calculan el valor más pequeño y más grande de una columna, respectivamente. Si una consulta contiene una cláusula WHERE, las funciones MIN y MAX devuelven los valores más pequeño y más grande de las filas que coinciden con las condiciones especificadas. El siguiente ejemplo muestra el uso de la función agregada MIN:

UTILICE SampleDb; -- Devuelve 2581 SELECCIONE MIN(Id) COMO "Valor de identificación mínimo" DEL Empleado;

El resultado obtenido en el ejemplo anterior no es muy informativo. Por ejemplo, se desconoce el apellido del empleado propietario de este número. Pero no es posible obtener este apellido de la forma habitual porque, como se mencionó anteriormente, no se le permite especificar explícitamente la columna Apellido. Para obtener también el apellido de este empleado junto con el número de personal más bajo de un empleado, se utiliza una subconsulta. El siguiente ejemplo muestra el uso de dicha subconsulta, donde la subconsulta contiene la instrucción SELECT del ejemplo anterior:

Resultado de la solicitud:

El uso de la función agregada MAX se muestra en el siguiente ejemplo:

Las funciones MIN y MAX también pueden aceptar cadenas y fechas como argumentos. En el caso de un argumento de cadena, los valores se comparan utilizando el orden de clasificación real. Para todos los argumentos de datos de tiempo de tipo "fecha", el valor de columna más pequeño es la fecha más temprana y el valor de columna más grande es la última.

Puede utilizar la palabra clave DISTINCT con las funciones MIN y MAX. Antes de utilizar las funciones agregadas MIN y MAX, todos los valores NULL se eliminan de sus columnas de argumentos.

Función agregada SUMA

Agregar función SUMA Calcula la suma total de los valores de una columna. El argumento de esta función agregada siempre debe ser un tipo de datos numérico. El uso de la función agregada SUM se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONAR SUMA (Presupuesto) "Presupuesto total" DEL Proyecto;

Este ejemplo calcula la cantidad total de presupuestos para todos los proyectos. Resultado de la solicitud:

En este ejemplo, la función agregada agrupa todos los valores del presupuesto del proyecto y determina su monto total. Por este motivo, la consulta contiene una función de agrupación implícita (como todas las consultas similares). La función de agrupación implícita del ejemplo anterior se puede especificar explícitamente, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONE SUMA (Presupuesto) "Presupuesto total" DEL GRUPO DE PROYECTOS POR();

El uso del parámetro DISTINCT elimina todos los valores duplicados en una columna antes de aplicar la función SUMA. Asimismo, todos los valores NULL se eliminan antes de aplicar esta función agregada.

función agregada AVG

Agregar función AVG Devuelve el promedio aritmético de todos los valores de una columna. El argumento de esta función agregada siempre debe ser un tipo de datos numérico. Antes de utilizar la función AVG, todos los valores NULL se eliminan de su argumento.

El uso de la función agregada AVG se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Regresar 133833 SELECT AVG (Presupuesto) "Presupuesto promedio para el proyecto" FROM Proyecto;

Aquí se calcula la media aritmética del valor del presupuesto para todos los presupuestos.

Funciones agregadas COUNT y COUNT_BIG

Agregar función CONTAR tiene dos formas diferentes:

CONTAR(nombre_columna) CONTAR(*)

La primera forma de la función cuenta el número de valores en la columna col_name. Si la consulta usa la palabra clave DISTINCT, todos los valores duplicados en la columna se eliminan antes de usar la función COUNT. Esta forma de la función COUNT no tiene en cuenta los valores NULL al contar el número de valores en una columna.

El uso de la primera forma de la función agregada COUNT se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECT ProjectNumber, COUNT(DISTINCT Job) "Trabaja en el proyecto" FROM Works_on GROUP BY ProjectNumber;

Aquí se cuenta el número de puestos diferentes para cada proyecto. El resultado de esta consulta:

Como puede ver en la consulta de ejemplo, la función COUNT no tuvo en cuenta los valores NULL. (La suma de todos los valores en la columna de posición resultó ser 7, no 11, como debería ser).

La segunda forma de la función CONTAR, es decir La función COUNT(*) cuenta el número de filas de una tabla. Y si la instrucción SELECT de una consulta con la función COUNT(*) contiene una cláusula WHERE con una condición, la función devuelve el número de filas que satisfacen la condición especificada. A diferencia de la primera versión de la función COUNT, la segunda forma no ignora los valores NULL porque esta función opera en filas, no en columnas. El siguiente ejemplo demuestra el uso de la función CONTAR(*):

UTILICE SampleDb; SELECCIONE Trabajo COMO "Tipo de trabajo", COUNT(*) "Necesita trabajadores" FROM Works_on GROUP BY Job;

Aquí se calcula el número de puestos en todos los proyectos. Resultado de la solicitud:

Función COUNT_BIG similar a la función CONTAR. La única diferencia entre ellos es el tipo de resultado que devuelven: la función CONTAR_BIG siempre devuelve valores GRANDES, mientras que la función CONTAR devuelve valores de datos ENTEROS.

Funciones estadísticas agregadas

Las siguientes funciones conforman el grupo de funciones agregadas estadísticas:

var

Calcula la varianza estadística de todos los valores representados en una columna o expresión.

VARP

Calcula la varianza estadística de la población de todos los valores representados en una columna o expresión.

DESVEST

Calcula la desviación estándar (que se calcula como la raíz cuadrada de la varianza correspondiente) de todos los valores de una columna o expresión.

STDEVP

Calcula la desviación estándar de la población de todos los valores de una columna o expresión.

Funciones agregadas definidas por el usuario

El motor de base de datos también admite la implementación de funciones definidas por el usuario. Esta capacidad permite a los usuarios aumentar las funciones agregadas del sistema con funciones que pueden implementar e instalar ellos mismos. Estas funciones representan una clase especial de funciones definidas por el usuario y se analizan en detalle más adelante.

TENER oferta

en una oración TENIENDO define una condición que se aplica a un grupo de filas. Por lo tanto, esta cláusula tiene el mismo significado para grupos de filas que la cláusula WHERE para el contenido de la tabla correspondiente. La sintaxis de la cláusula HAVING es:

TENER condición

Aquí el parámetro de condición representa la condición y contiene funciones agregadas o constantes.

El uso de la cláusula HAVING junto con la función agregada COUNT(*) se ilustra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve "p3" SELECCIONAR Número de Proyecto DESDE Works_on GRUPO POR Número de Proyecto TENER CONTADOR(*)

En este ejemplo, el sistema agrupa todas las filas por los valores de la columna ProjectNumber usando la cláusula GROUP BY. Después de esto, se cuenta el número de filas de cada grupo y se seleccionan los grupos que contienen menos de cuatro filas (tres o menos).

La cláusula HAVING también se puede utilizar sin funciones agregadas, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve "Consultor" SELECCIONE Trabajo DE Works_on GRUPO POR Trabajo QUE TIENE Trabajo COMO "K%";

Este ejemplo agrupa las filas de la tabla Works_on por título de trabajo y elimina aquellos trabajos que no comienzan con la letra "K".

La cláusula HAVING también se puede utilizar sin la cláusula GROUP BY, aunque esto no es una práctica común. En este caso, todas las filas de la tabla se devuelven en un grupo.

Cláusula ORDEN POR

Oferta ORDENAR POR determina el orden de clasificación de las filas en el conjunto de resultados devuelto por la consulta. Esta oración tiene la siguiente sintaxis:

El orden de clasificación se especifica en el parámetro col_name. El parámetro col_number es un indicador de orden de clasificación alternativo que identifica las columnas por el orden en que aparecen en la lista de selección de la instrucción SELECT (1 es la primera columna, 2 es la segunda columna, etc.). parámetro ASC especifica la clasificación en orden ascendente, y parámetro DESC- en dirección descendente. El valor predeterminado es ASC.

Los nombres de las columnas en la cláusula ORDER BY no tienen que estar en la lista de columnas seleccionadas. Pero esto no se aplica a consultas como SELECT DISTINCT, porque en tales consultas, los nombres de las columnas especificadas en la cláusula ORDER BY también deben especificarse en la lista de columnas seleccionadas. Además, esta cláusula no puede contener nombres de columnas de tablas no especificadas en la cláusula FROM.

Como puede ver en la sintaxis de la cláusula ORDER BY, el conjunto de resultados se puede ordenar por varias columnas. Esta clasificación se muestra en el siguiente ejemplo:

En este ejemplo, se seleccionan números de departamento y nombres de empleados para los empleados cuyo número de personal es inferior a 20.000 y se ordenan por apellido y nombre. El resultado de esta consulta:

Las columnas de la cláusula ORDER BY se pueden especificar no por sus nombres, sino por su orden en la lista de selección. En consecuencia, la oración del ejemplo anterior se puede reescribir de la siguiente manera:

Este método alternativo de especificar columnas por posición en lugar de por nombre se utiliza si el criterio de ordenación contiene una función agregada. (Otra forma es utilizar los nombres de las columnas, que luego aparecen en la cláusula ORDER BY). Sin embargo, en la cláusula ORDER BY, se recomienda especificar las columnas por sus nombres en lugar de por números, para que sea más fácil actualizar la consultar si es necesario agregar o eliminar columnas de la lista de selección. En el siguiente ejemplo se muestra la especificación de columnas en la cláusula ORDER BY por sus números:

UTILICE SampleDb; SELECCIONE Número de proyecto, COUNT(*) "Número de empleados" DESDE Works_on GRUPO POR Número de proyecto ORDEN POR 2 DESC;

Aquí, para cada proyecto, se selecciona el número de proyecto y el número de empleados que participan en el mismo, ordenando el resultado en orden descendente por el número de empleados.

Transact-SQL coloca valores NULL al principio de la lista cuando se ordena en orden ascendente y al final de la lista cuando se ordena en orden descendente.

Usar una cláusula ORDER BY para paginar resultados

La visualización de los resultados de la consulta en la página actual se puede implementar en la aplicación del usuario o puede indicarle al servidor de la base de datos que lo haga. En el primer caso, todas las filas de la base de datos se envían a la aplicación, cuyo trabajo es seleccionar las filas requeridas y mostrarlas. En el segundo caso, en el lado del servidor, solo se seleccionan y muestran las filas necesarias para la página actual. Como es de esperar, la creación de páginas en el lado del servidor generalmente proporciona un mejor rendimiento porque... Solo se envían al cliente las líneas necesarias para su visualización.

Para admitir la creación de páginas del lado del servidor, SQL Server 2012 introduce dos nuevas cláusulas SELECT: OFFSET y FETCH. La aplicación de estas dos oraciones se demuestra en el siguiente ejemplo. Aquí, de la base de datos AdventureWorks2012 (que puede encontrar en la fuente), se recupera la identificación de la empresa, el puesto de trabajo y la fecha de nacimiento de todas las empleadas, clasificando el resultado por puesto de trabajo en orden ascendente. El conjunto de filas resultante se divide en páginas de 10 líneas y se muestra la tercera página:

en una oración COMPENSAR especifica el número de líneas de resultados que se omitirán en el resultado mostrado. Este número se calcula después de ordenar las filas mediante la cláusula ORDER BY. en una oración BUSCAR SIGUIENTE especifica el número de filas que satisfacen la condición WHERE y están ordenadas para ser devueltas. El parámetro de esta cláusula puede ser una constante, una expresión o el resultado de otra consulta. La cláusula FETCH NEXT es similar a la BUSCAR PRIMERO.

El objetivo principal al crear páginas del lado del servidor es poder implementar formularios de página comunes utilizando variables. Esta tarea se puede realizar utilizando el paquete SQL Server.

Declaración SELECT y propiedad IDENTITY

propiedad de IDENTIDAD le permite definir valores para una columna de tabla específica en forma de un contador que aumenta automáticamente. Las columnas de tipos de datos numéricos como TINYINT, SMALLINT, INT y BIGINT pueden tener esta propiedad. Para dicha columna de tabla, el motor de base de datos crea automáticamente valores secuenciales a partir del valor inicial especificado. Por lo tanto, la propiedad IDENTIDAD se puede utilizar para crear valores numéricos de un solo dígito para una columna seleccionada.

Una tabla sólo puede contener una columna con la propiedad IDENTIDAD. El propietario de la tabla tiene la opción de especificar un valor inicial y un incremento, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; CREAR TABLA Producto (Id INT IDENTITY(10000, 1) NOT NULL, Nombre NVARCHAR(30) NOT NULL, Precio DINERO) INSERTAR EN Producto(Nombre, Precio) VALORES ("Producto1", 10), ("Producto2", 15) , ("Producto3", 8), ("Producto4", 15), ("Producto5", 40); -- Devuelve 10004 SELECCIONE IDENTITYCOL DEL Producto DONDE Nombre = "Producto5"; -- Similar a la declaración anterior SELECT $identity FROM Product WHERE Name = "Product5";

Este ejemplo primero crea una tabla Producto que contiene una columna Id con una propiedad IDENTIDAD. El sistema crea automáticamente los valores en la columna Id, comenzando en 10,000 y aumentando en incrementos unitarios para cada valor posterior: 10,000, 10,001, 10,002, etc.

Varias funciones y variables del sistema están asociadas con la propiedad IDENTIDAD. Por ejemplo, el código de ejemplo utiliza variable del sistema de identidad $. Como puede ver en el resultado de este código, esta variable hace referencia automáticamente a la propiedad IDENTIDAD. También puedes usar la función del sistema en su lugar. IDENTIDADCOL.

El valor inicial y el incremento de una columna con la propiedad IDENTIDAD se pueden encontrar usando las funciones IDENT_SEED Y IDENT_INCR respectivamente. Estas funciones se utilizan de la siguiente manera:

UTILICE SampleDb; SELECCIONE IDENT_SEED("Producto"), IDENT_INCR("Producto")

Como ya se mencionó, los valores de IDENTIDAD los establece automáticamente el sistema. Pero el usuario puede especificar explícitamente sus valores para ciertas filas asignando el parámetro IDENTIDAD_INSERT Valor ON antes de insertar un valor explícito:

SET IDENTITY INSERT nombre de tabla ON

Dado que puede utilizar el parámetro IDENTITY_INSERT para establecer una columna con la propiedad IDENTITY en cualquier valor, incluido un valor duplicado, la propiedad IDENTITY generalmente no exige la unicidad de los valores de la columna. Por lo tanto, para imponer la unicidad de los valores de las columnas, debe utilizar restricciones ÚNICAS o PRIMARIAS.

Cuando inserta valores en una tabla después de activar IDENTITY_INSERT, el sistema crea el siguiente valor de la columna IDENTITY incrementando el valor actual más grande de esa columna.

CREAR declaración de SECUENCIA

Existen varias desventajas importantes al utilizar la propiedad IDENTITY, las más importantes de las cuales son las siguientes:

    la aplicación de la propiedad se limita a la tabla especificada;

    el nuevo valor de la columna no se puede obtener de ninguna otra forma que no sea aplicándolo;

    la propiedad IDENTITY solo se puede especificar al crear una columna.

Por estos motivos, SQL Server 2012 introduce secuencias que tienen la misma semántica que la propiedad IDENTITY, pero sin las desventajas enumeradas anteriormente. En este contexto, una secuencia es una funcionalidad de base de datos que le permite especificar valores de contador para diferentes objetos de la base de datos, como columnas y variables.

Las secuencias se crean usando instrucciones. CREAR SECUENCIA. La declaración CREATE SEQUENCE está definida en el estándar SQL y es compatible con otros sistemas de bases de datos relacionales como IBM DB2 y Oracle.

El siguiente ejemplo muestra cómo crear una secuencia en SQL Server:

UTILICE SampleDb; CREAR SECUENCIA dbo.Sequence1 COMO INT COMENZAR CON 1 AUMENTO EN 5 MINVALUE 1 MAXVALUE 256 CICLO;

En el ejemplo anterior, el sistema crea automáticamente los valores de Sequence1, comenzando con el valor 1 e incrementando 5 para cada valor posterior. Así, en INICIO oferta se indica el valor inicial, y en Oferta INCREMENTO- paso. (El paso puede ser positivo o negativo).

En las siguientes dos oraciones opcionales VALOR MÍNIMO Y VALOR MÁXIMO Se especifica el valor mínimo y máximo del objeto de secuencia. (Tenga en cuenta que el valor MINVALUE debe ser menor o igual que el valor inicial y el valor MAXVALUE no puede ser mayor que el límite superior del tipo de datos especificado para la secuencia). CICLO indica que la secuencia se repite desde el principio cuando se excede el valor máximo (o mínimo para una secuencia con un paso negativo). De forma predeterminada, esta cláusula está configurada en SIN CICLO, lo que significa que exceder el valor máximo o mínimo de la secuencia generará una excepción.

La característica principal de las secuencias es su independencia de las tablas, es decir. se pueden utilizar con cualquier objeto de base de datos, como columnas de tabla o variables. (Esta propiedad tiene un efecto positivo en el almacenamiento y, por lo tanto, en el rendimiento. No es necesario almacenar la secuencia específica; solo se almacena su último valor).

Los nuevos valores de secuencia se crean usando PRÓXIMO VALOR PARA expresiones, cuya aplicación se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve 1 SELECCIONE EL SIGUIENTE VALOR PARA dbo.sequence1; -- Devuelve 6 (siguiente paso) SELECCIONE EL SIGUIENTE VALOR PARA dbo.sequence1;

Puede utilizar la expresión NEXT VALUE FOR para asignar el resultado de una secuencia a una variable o celda de columna. El siguiente ejemplo muestra cómo utilizar esta expresión para asignar resultados a una columna:

UTILICE SampleDb; CREAR TABLA Producto (Id INT NOT NULL, Nombre NVARCHAR(30) NOT NULL, Precio DINERO) INSERTAR EN VALORES DEL Producto (SIGUIENTE VALOR PARA dbo.sequence1, "Product1", 10); INSERTAR EN VALORES DEL PRODUCTO (SIGUIENTE VALOR PARA dbo.sequence1, "Product2", 15); --...

En el ejemplo anterior, primero creamos una tabla de Producto que consta de cuatro columnas. A continuación, dos declaraciones INSERT insertan dos filas en esta tabla. Las dos primeras celdas de la primera columna tendrán los valores 11 y 16.

El siguiente ejemplo muestra el uso de una vista de directorio. secuencias del sistema para ver el valor actual de una secuencia sin usarla:

Normalmente, la instrucción NEXT VALUE FOR se utiliza en una instrucción INSERT para hacer que el sistema inserte los valores generados. Esta expresión también se puede utilizar como parte de una consulta de varias filas utilizando la cláusula OVER.

Para cambiar una propiedad de una secuencia existente, use Declaración ALTERAR SECUENCIA. Uno de los usos más importantes de esta declaración es con la opción REINICIAR CON, que restablece la secuencia especificada. El siguiente ejemplo muestra el uso de ALTER SEQUENCE para restablecer casi todas las propiedades de Sequence1:

UTILICE SampleDb; ALTERAR SECUENCIA dbo.sequence1 REINICIAR CON 100 INCREMENTAR EN 50 MINVALUE 50 MAXVALUE 200 SIN CICLO;

Eliminar una secuencia usando una instrucción SECUENCIA DE CAÍDA.

Establecer operadores

Además de los operadores analizados anteriormente, Transact-SQL admite tres operadores de conjuntos más: UNION, INTERSECT y EXCEPT.

operador de la UNIÓN

operador de la UNIÓN combina los resultados de dos o más consultas en un único conjunto de resultados que incluye todas las filas que pertenecen a todas las consultas de la unión. En consecuencia, el resultado de unir dos tablas es una nueva tabla que contiene todas las filas incluidas en una de las tablas originales o en ambas tablas.

La forma general del operador UNION se ve así:

select_1 UNION select_2 ( select_3])...

Los parámetros select_1, select_2, ... son declaraciones SELECT que crean una unión. Si se utiliza la opción TODOS, se muestran todas las filas, incluidos los duplicados. En un operador UNION, el parámetro ALL tiene el mismo significado que en una lista de selección SELECT, pero con una diferencia: para una lista de selección SELECT, este parámetro se usa de forma predeterminada, pero para un operador UNION, debe especificarse explícitamente.

En su forma original, la base de datos SampleDb no es adecuada para demostrar el uso del operador UNION. Por lo tanto, esta sección crea una nueva tabla, EmployeeEnh, que es idéntica a la tabla Empleado existente, pero tiene una columna Ciudad adicional. Esta columna indica el lugar de residencia de los empleados.

La creación de la tabla EmployeeEnh nos brinda una buena oportunidad para demostrar el uso de la cláusula. EN en la declaración SELECT. La instrucción SELECT INTO realiza dos operaciones. Primero, se crea una nueva tabla con las columnas enumeradas en la lista SELECT. Luego, las filas de la tabla original se insertan en la nueva tabla. El nombre de la nueva tabla se especifica en la cláusula INTO y el nombre de la tabla de origen se especifica en la cláusula FROM.

El siguiente ejemplo muestra cómo crear la tabla EmployeeEnh a partir de la tabla Employee:

UTILICE SampleDb; SELECCIONE * EN EmpleadoEnh DESDE Empleado; ALTER TABLE EmployeeEnh AGREGAR Ciudad NCHAR(40) NULL;

En este ejemplo, la instrucción SELECT INTO crea la tabla EmployeeEnh, inserta todas las filas de la tabla fuente Empleado en ella y luego la instrucción ALTER TABLE agrega la columna Ciudad a la nueva tabla. Pero la columna Ciudad agregada no contiene ningún valor. Los valores de esta columna se pueden insertar usando Management Studio o usando el siguiente código:

UTILICE SampleDb; ACTUALIZAR EmpleadoEnh SET Ciudad = "Kazán" DONDE Id = 2581; ACTUALIZAR EmployeeEnh SET Ciudad = "Moscú" DONDE Id = 9031; ACTUALIZAR EmployeeEnh SET Ciudad = "Ekaterimburgo" DONDE Id = 10102; ACTUALIZAR EmployeeEnh SET Ciudad = "San Petersburgo" DONDE Id = 18316; ACTUALIZAR EmployeeEnh SET Ciudad = "Krasnodar" DONDE Id = 25348; ACTUALIZAR EmployeeEnh SET Ciudad = "Kazán" DONDE Id = 28559; ACTUALIZAR EmployeeEnh SET Ciudad = "Perm" DONDE Id = 29346;

Ahora estamos listos para demostrar el uso de la instrucción UNION. El siguiente ejemplo muestra una consulta para crear una combinación entre las tablas EmployeeEnh y Department usando esta declaración:

UTILICE SampleDb; SELECCIONE Ciudad COMO "Ciudad" DE EmployeeEnh UNION SELECCIONE Ubicación DEL Departamento;

El resultado de esta consulta:

Sólo se pueden unir tablas compatibles mediante la declaración UNION. Por tablas compatibles queremos decir que ambas listas de columnas seleccionadas deben contener la misma cantidad de columnas y las columnas correspondientes deben tener tipos de datos compatibles. (En términos de compatibilidad, los tipos de datos INT y SMALLINT no son compatibles).

El resultado de una combinación solo se puede ordenar utilizando la cláusula ORDER BY en la última instrucción SELECT, como se muestra en el siguiente ejemplo. Las cláusulas GROUP BY y HAVING se pueden usar con declaraciones SELECT individuales, pero no dentro de la combinación misma.

La consulta de este ejemplo selecciona empleados que trabajan en el departamento d1 o que comenzaron a trabajar en el proyecto antes del 1 de enero de 2008.

El operador UNION admite el parámetro TODOS. El uso de esta opción no elimina los duplicados del conjunto de resultados. Puede utilizar el operador OR en lugar del operador UNION si todas las declaraciones SELECT unidas por uno o más operadores UNION hacen referencia a la misma tabla. En este caso, el conjunto de sentencias SELECT se reemplaza por una única sentencia SELECT con un conjunto de operadores OR.

Operadores INTERSECT y EXCEPT

Otros dos operadores para trabajar con decorados, INTERSECARSE Y EXCEPTO, determine la intersección y la diferencia, respectivamente. En este contexto, bajo intersección hay un conjunto de filas que pertenecen a ambas tablas. Y la diferencia entre dos tablas se define como todos los valores que pertenecen a la primera tabla y no están presentes en la segunda. El siguiente ejemplo muestra el uso del operador INTERSECT:

Transact-SQL no admite el uso del parámetro ALL con el operador INTERSECT o EXCEPT. El uso del operador EXCEPTO se muestra en el siguiente ejemplo:

Recuerde que estos tres operadores de conjunto tienen diferentes prioridades de ejecución: el operador INTERSECT tiene la prioridad más alta, seguido del operador EXCEPT y el operador UNION tiene la prioridad más baja. No prestar atención a la precedencia de ejecución cuando se utilizan varios operadores de conjuntos diferentes puede producir resultados inesperados.

Expresiones CASO

En el campo de la programación de aplicaciones de bases de datos, en ocasiones es necesario modificar la representación de los datos. Por ejemplo, se pueden subdividir las personas codificándolas según su clase social, utilizando los valores 1, 2 y 3, que denotan hombres, mujeres y niños respectivamente. Esta técnica de programación puede reducir el tiempo necesario para implementar un programa. expresión CASO El lenguaje Transact-SQL facilita la implementación de este tipo de codificación.

A diferencia de la mayoría de los lenguajes de programación, CASE no es una declaración, sino una expresión. Por lo tanto, una expresión CASE se puede utilizar casi en cualquier lugar donde Transact-SQL permita expresiones. La expresión CASE tiene dos formas:

    expresión CASE simple;

    expresión de búsqueda CASE.

La sintaxis de una expresión CASE simple es:

Una declaración con una expresión CASE simple primero busca una lista de todas las expresiones en cláusula CUÁNDO la primera expresión que coincide con expresión_1, luego ejecuta la correspondiente ENTONCES cláusula. Si no hay ninguna expresión coincidente en la lista WHEN, el Cláusula ELSE.

La sintaxis de la expresión de búsqueda CASE es la siguiente:

Esto busca la primera condición coincidente y luego ejecuta la cláusula THEN correspondiente. Si ninguna de las condiciones cumple los requisitos, se ejecuta la cláusula ELSE. El uso de una expresión de búsqueda CASE se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONE Nombre del proyecto, CASO CUANDO Presupuesto > 0 Y Presupuesto 100000 Y Presupuesto 150000 Y Presupuesto

El resultado de esta consulta:

Este ejemplo pesa los presupuestos de todos los proyectos y luego muestra sus pesos calculados junto con los nombres de los proyectos correspondientes.

El siguiente ejemplo muestra otra forma de utilizar una expresión CASE, donde la cláusula WHEN contiene subconsultas que forman parte de la expresión:

UTILICE SampleDb; SELECCIONE Nombre del proyecto, CASO CUANDO p1.Budget (SELECCIONE AVG(p2.Budget) DEL Proyecto p2) ENTONCES "arriba del promedio" FINAL "Categoría de presupuesto" DEL Proyecto p1;

El resultado de esta consulta es el siguiente:



  • Funciones agregadas se utilizan de manera similar a los nombres de campo en una instrucción SELECT, con una excepción: toman el nombre del campo como argumento. Con funciones SUMA Y AVG Sólo se pueden utilizar campos numéricos. Con funciones CUENTA, MAX y MIN Se pueden utilizar campos numéricos y de caracteres. Cuando se usa con campos de caracteres MÁXIMO Y MÍNIMO los traducirá al equivalente del código ASCII y los procesará en orden alfabético. Algunos DBMS permiten el uso de agregados anidados, pero esto es una desviación del estándar ANSI con todas las consecuencias consiguientes.


Por ejemplo, puede calcular la cantidad de estudiantes que realizaron exámenes en cada disciplina. Para hacer esto, debe ejecutar una consulta agrupada por el campo "Disciplina" y mostrar como resultado el nombre de la disciplina y el número de filas en el grupo para esta disciplina. Usar el carácter * como argumento para la función CONTAR significa contar todas las filas del grupo.

SELECCIONE R1. Disciplina, COUNT(*)

GRUPO POR R1.Disciplina;

Resultado:


SELECCIONAR R1.Disciplina, CONTAR (*)

DONDE R1. La evaluación NO ES NULA

GRUPO POR R1.Disciplina;

Resultado:


no se incluirá en el conjunto de tuplas antes de la agrupación, por lo que el número de tuplas en el grupo para la disciplina “Teoría de la Información” será 1 menos.

Se puede obtener un resultado similar si escribe la consulta de la siguiente manera:

SELECCIONE R1. Disciplina, CONTAR(R1. Calificación)

AGRUPAR POR R1. Disciplina;

Función RECUENTO (NOMBRE DEL ATRIBUTO) cuenta el número de valores específicos en un grupo, a diferencia de una función CONTAR(*), que cuenta el número de filas en un grupo. De hecho, en un grupo con la disciplina “Teoría de la información” habrá 4 líneas, pero solo 3 valores específicos para el atributo “Evaluación”.


Reglas para manejar valores NULL en funciones agregadas

Si algún valor en la columna es igual NULO Al calcular el resultado de la función, se excluyen.

Si todos los valores de una columna son iguales NULO, Eso Promedio de suma máxima mínima = NULO cuenta = 0 (cero).

Si la mesa está vacía, contar(*) = 0 .

También puede utilizar funciones agregadas sin la operación de agrupación previa, en cuyo caso la relación completa se trata como un grupo y se puede calcular un valor por grupo para este grupo.

Reglas para interpretar funciones agregadas.

Las funciones agregadas se pueden incluir en la lista de salida y luego se aplican a toda la tabla.

SELECCIONAR MAX (Evaluación) de R1 dará la máxima valoración durante la sesión;

SELECCIONAR SUMA (Puntuación) de R1 dará la suma de todas las calificaciones de la sesión;

SELECCIONE AVG (clasificación) de R1 dará una puntuación media de toda la sesión.


2; Resultado: "ancho="640"

Volviendo nuevamente a la base de datos “Sesión” (tabla R1), encontramos el número de exámenes aprobados con éxito:

SELECCIONE CONTAR(*) Como Entregado _ exámenes

DÓNDE Puntuación 2;

Resultado:


Los argumentos para agregar funciones pueden ser columnas de tabla individuales. Para calcular, por ejemplo, el número de valores distintos de una determinada columna en un grupo, debe utilizar la palabra clave DISTINCT junto con el nombre de la columna. Calculemos el número de calificaciones diferentes recibidas en cada disciplina:

SELECCIONAR R1.Disciplina, CONTAR (DISTINCT R1.Evaluación)

DONDE R1. La evaluación NO ES NULA

GRUPO POR R1.Disciplina;

Resultado:


Se obtiene el mismo resultado si excluimos la condición explícita en la parte WHERE, en cuyo caso la consulta se verá así:

SELECCIONE R1. Disciplina, CONTAR (DISTINTO R1. Evaluación)

AGRUPAR POR R1. Disciplina;

Función RECUENTO (DISTINCT R1.Evaluación) cuenta solo ciertos varios significados.

Para obtener el resultado deseado en este caso, es necesario realizar una transformación preliminar del tipo de datos de la columna "Rating", llevándolo a un tipo real, entonces el resultado del cálculo del promedio no será un entero. En este caso, la solicitud se verá así:


2 Agrupar por R2. Grupo, R1. Disciplina; Aquí, la función CAST() convierte la columna Puntuación en un tipo de datos válido. "ancho="640"

Seleccione R2.Grupo, R1.Disciplina, Contar(*) como Total, AVG(emitir(Puntuación como decimal(3,1))) como Puntuación_promedio

Desde R1,R2

donde R1. Nombre completo = R2. Nombre completo y R1. la puntuación no es nula

y R1. Puntuación 2

Agrupar por R2. Grupo, R1. Disciplina;

Aquí está la función ELENCO() Convierte la columna Clasificación a un tipo de datos válido.


No puede utilizar funciones agregadas en una cláusula WHERE porque las condiciones de esta sección se evalúan en términos de una sola fila y las funciones agregadas se evalúan en términos de grupos de filas.

La cláusula GROUP BY le permite definir un subconjunto de los valores de un campo particular en términos de otro campo y aplicar una función agregada al subconjunto. Esto hace posible combinar campos y funciones agregadas en una única cláusula SELECT. Las funciones agregadas se pueden usar tanto en la expresión para generar los resultados de la línea SELECT como en la expresión de la condición para procesar HAVING grupos formados. En este caso, cada función agregada se calcula para cada grupo seleccionado. Los valores obtenidos del cálculo de funciones agregadas se pueden utilizar para mostrar los resultados correspondientes o para condicionar la selección de grupos.

Creemos una consulta que muestre grupos en los que se recibió más de una mala calificación en una disciplina en los exámenes:


1; Resultado: "ancho="640"

SELECCIONE R2. Grupo

DESDE R1,R2

DONDE R1. Nombre completo = R2. Nombre completo Y

R1.Puntuación = 2

GRUPO POR R2.Grupo, R1.Disciplina

TENIENDO cuenta (*) 1;

Resultado:


Tenemos una base de datos "Banco", que consta de una tabla F, que almacena la relación F que contiene información sobre cuentas en sucursales de un determinado banco:

Encuentre el saldo total de las cuentas en las sucursales. Puede hacer una consulta separada para cada uno de ellos seleccionando SUMA (Restante) de la tabla para cada rama, pero la operación GROUP BY le permite ponerlos todos en un solo comando:

SELECCIONAR Rama , SUMA( Resto )

GRUPO POR Sucursal;

Agrupar por aplica funciones agregadas de forma independiente a cada grupo identificado por el valor del campo Sucursal. El grupo consta de filas con el mismo valor del campo Rama y la función SUMA se aplica por separado para cada grupo, es decir, el saldo total de la cuenta se calcula por separado para cada sucursal. El valor del campo al que se aplica. Agrupar por, por definición, tiene solo un valor por grupo de salida, al igual que el resultado de una función agregada.


5.000; Los argumentos en una cláusula HAVING siguen las mismas reglas que en una cláusula SELECT que usa GROUP BY. Deben tener un valor por grupo de salida. "ancho="640"

Supongamos que seleccionamos sólo aquellas sucursales cuyos saldos totales de cuentas superan los $5,000, así como los saldos totales de las sucursales seleccionadas. Para mostrar resultados para sucursales con saldos totales superiores a $5,000, debe usar la cláusula HAVING. La cláusula HAVING especifica los criterios utilizados para eliminar ciertos grupos de la salida, tal como lo hace la cláusula WHERE para filas individuales.

El comando correcto sería:

SELECCIONAR Rama, SUM(Restante)

Agrupar por Rama

TENER SUMA ( Resto ) 5 000;

Argumentos en una oración TENIENDO obedecer las mismas reglas que en la oración SELECCIONAR donde se usa Agrupar por. Deben tener un valor por grupo de salida.


El siguiente comando estará prohibido:

SELECCIONAR Rama,SUM(Restante)

GRUPO POR Sucursal

TENIENDO Fecha de Apertura = 27/12/2004 ;

Campo Fecha de apertura no se puede usar en una oración TENIENDO, porque puede tener más de un valor por grupo de salida. Para evitar tal situación, la sugerencia TENIENDO sólo debe hacer referencia a los agregados y campos seleccionados Agrupar por. Existe una forma correcta de realizar la consulta anterior:

SELECCIONAR Rama,SUM(Restante)

DONDEOpenDate = '27/12/2004'

GRUPO POR Sucursal;


El significado de esta consulta es el siguiente: encuentre la suma de los saldos de cada sucursal de cuentas abiertas el 27 de diciembre de 2004.

Como se indicó anteriormente, HAVING solo puede aceptar argumentos que tengan un valor por grupo de salida. En la práctica, las referencias a funciones agregadas son las más comunes, pero los campos seleccionados usando GROUP BY también son válidos. Por ejemplo, queremos ver los saldos totales de las cuentas de las sucursales en San Petersburgo, Pskov y Uryupinsk:

SELECCIONAR Rama, SUM(Restante)

DESDE F,Q

DONDE F. Rama = Q. Rama

GRUPO POR Sucursal

TENIENDO Sucursal EN ('San Petersburgo', 'Pskov', 'Uryupinsk');

100.000; Si el saldo total es superior a $100.000, lo veremos en la relación resultante; de ​​lo contrario, obtendremos una relación vacía. "ancho="640"

Por lo tanto, solo las especificaciones de las columnas especificadas como columnas de agrupación en la cláusula GROUP BY se pueden usar directamente en expresiones aritméticas de predicados incluidas en la cláusula de selección de la cláusula HAVING. Las columnas restantes solo se pueden especificar dentro de las especificaciones de las funciones agregadas COUNT, SUM, AVG, MIN y MAX, que en este caso calculan algún valor agregado para todo el grupo de filas. El resultado de ejecutar la sección HAVING es una tabla agrupada que contiene solo aquellos grupos de filas para los cuales el resultado del cálculo de la condición de selección en la sección HAVING es VERDADERO. En particular, si una cláusula HAVING está presente en una consulta que no contiene GROUP BY, entonces el resultado de su ejecución será una tabla vacía o el resultado de ejecutar las secciones anteriores de la expresión de la tabla, tratada como un solo grupo. sin agrupar columnas. Veamos un ejemplo. Digamos que queremos mostrar la cantidad total de saldos en todas las sucursales, pero solo si es más de $100,000. En este caso, nuestra consulta no contendrá operaciones de agrupación, pero contendrá una sección TENER y se verá así:

SELECCIONAR SUMA( Resto )

TENER SUMA( Resto ) 100 000;

Si el saldo total es superior a $100.000, lo veremos en la relación resultante; de ​​lo contrario, obtendremos una relación vacía.


Cláusula GRUPO POR(declaraciones SELECT) le permite agrupar datos (filas) por el valor de una columna o varias columnas o expresiones. El resultado será un conjunto de filas de resumen.

Cada columna de la lista de selección debe aparecer en la cláusula GROUP BY, con la excepción de las constantes y las columnas de operandos de funciones agregadas.

Puede agrupar una tabla por cualquier combinación de sus columnas.

Funciones agregadas se utilizan para obtener un único valor total de un grupo de filas. Todas las funciones agregadas realizan cálculos sobre un único argumento, que puede ser una columna o una expresión. El resultado de cualquier cálculo de función agregada es un valor constante que se muestra en una columna de resultados separada.

Las funciones agregadas se especifican en la lista de columnas de una instrucción SELECT, que también puede contener una cláusula GROUP BY. Si no hay una cláusula GROUP BY en la instrucción SELECT y la lista de columnas seleccionadas contiene al menos una función agregada, entonces no debe contener columnas simples. Por otro lado, la lista de selección de columnas puede contener nombres de columnas que no son argumentos para la función agregada si esas columnas son argumentos para la cláusula GROUP BY.

Si la consulta contiene una cláusula WHERE, las funciones agregadas calculan el valor de los resultados de la selección.

Funciones agregadas MIN y MAX calcule el valor más pequeño y más grande de la columna, respectivamente. Los argumentos pueden ser números, cadenas y fechas. Todos los valores NULL se eliminan antes del cálculo (es decir, no se tienen en cuenta).

Función agregada SUMA Calcula la suma total de los valores de una columna. Los argumentos sólo pueden ser números. El uso del parámetro DISTINCT elimina todos los valores duplicados en una columna antes de aplicar la función SUMA. Asimismo, todos los valores NULL se eliminan antes de aplicar esta función agregada.

función agregada AVG Devuelve el promedio de todos los valores de una columna. Los argumentos también pueden ser solo números y todos los valores NULL se eliminan antes de la evaluación.

Función agregada CONTAR tiene dos formas diferentes:

  • COUNT(col_name): cuenta el número de valores en la columna col_name, los valores NULL no se tienen en cuenta
  • COUNT(*): cuenta el número de filas de la tabla, los valores NULL también se tienen en cuenta

Si la consulta usa la palabra clave DISTINCT, todos los valores duplicados en la columna se eliminan antes de usar la función COUNT.

Función COUNT_BIG similar a la función CONTAR. La única diferencia entre ellos es el tipo de resultado que devuelven: la función CONTAR_BIG siempre devuelve valores GRANDES, mientras que la función CONTAR devuelve valores de datos ENTEROS.

EN TENER oferta define una condición que se aplica a un grupo de filas. Tiene el mismo significado para grupos de filas que la cláusula WHERE para el contenido de la tabla correspondiente (WHERE se aplica antes de agrupar, HAVING después).

Aprendamos a resumir. No, estos no son los resultados del estudio de SQL, sino los resultados de los valores de las columnas de las tablas de la base de datos. Las funciones agregadas de SQL operan sobre los valores de una columna para producir un único valor resultante. Las funciones agregadas de SQL más utilizadas son SUM, MIN, MAX, AVG y COUNT. Es necesario distinguir entre dos casos de uso de funciones agregadas. En primer lugar, las funciones agregadas se utilizan por sí solas y devuelven un único valor resultante. En segundo lugar, se utilizan funciones agregadas con la cláusula GROUP BY de SQL, es decir, agrupar por campos (columnas) para obtener los valores resultantes en cada grupo. Consideremos primero casos de uso de funciones agregadas sin agrupación.

Función SUMA SQL

La función SQL SUM devuelve la suma de los valores en una columna de la tabla de la base de datos. Sólo se puede aplicar a columnas cuyos valores sean números. Las consultas SQL para obtener la suma resultante comienzan así:

SELECCIONE SUMA(COLUMNA_NOMBRE)...

Esta expresión va seguida de FROM (TABLE_NAME) y luego se puede especificar una condición utilizando la cláusula WHERE. Además, el nombre de la columna puede ir precedido de DISTINCT, lo que significa que solo se contarán los valores únicos. De forma predeterminada, se tienen en cuenta todos los valores (para esto, puede especificar específicamente no DISTINCT, sino TODOS, pero no se requiere la palabra TODOS).

Ejemplo 1. Existe una base de datos de la empresa con datos sobre sus divisiones y empleados. La tabla Personal también tiene una columna con datos sobre los salarios de los empleados. La selección de la tabla se ve así (para ampliar la imagen, haga clic en ella con el botón izquierdo del mouse):

Para obtener la suma de todos los salarios, utilice la siguiente consulta:

SELECCIONE SUMA (Salario) DEL Personal

Esta consulta devolverá el valor 287664,63.

Y ahora. En los ejercicios ya empezamos a complicar las tareas, acercándolas a las que encontramos en la práctica.

Función mínima de SQL

La función SQL MIN también opera en columnas cuyos valores son números y devuelve el mínimo de todos los valores de la columna. Esta función tiene una sintaxis similar a la de la función SUMA.

Ejemplo 3. La base de datos y la tabla son las mismas que en el ejemplo 1.

Necesitamos averiguar el salario mínimo de los empleados del departamento número 42. Para ello, escriba la siguiente solicitud:

La consulta devolverá el valor 10505,90.

Y otra vez ejercicio para la auto-solución. En este y algunos otros ejercicios, necesitará no solo la tabla Staff, sino también la tabla Org, que contiene datos sobre las divisiones de la empresa:


Ejemplo 4. La tabla Org se agrega a la tabla Staff y contiene datos sobre los departamentos de la empresa. Imprima el número mínimo de años trabajados por un empleado en un departamento ubicado en Boston.

Función SQL MAX

La función SQL MAX funciona de manera similar y tiene una sintaxis similar, que se usa cuando necesita determinar el valor máximo entre todos los valores de una columna.

Ejemplo 5.

Necesitamos averiguar el salario máximo de los empleados del departamento número 42. Para ello, escriba la siguiente solicitud:

La consulta devolverá el valor 18352,80.

ha llegado el momento ejercicios para solución independiente.

Ejemplo 6. Volvemos a trabajar con dos tablas: Staff y Org. Muestra el nombre del departamento y el valor máximo de la comisión que recibe un empleado del departamento perteneciente al grupo de departamentos (División) Este. Usar JOIN (unir mesas) .

Función SQL AVG

Lo que se afirma con respecto a la sintaxis de las funciones anteriores descritas también es válido para la función SQL AVG. Esta función devuelve el promedio de todos los valores de una columna.

Ejemplo 7. La base de datos y la tabla son las mismas que en los ejemplos anteriores.

Supongamos que desea conocer la antigüedad promedio de los empleados del departamento número 42. Para ello, escriba la siguiente consulta:

El resultado será 6,33.

Ejemplo 8. Trabajamos con una mesa: el personal. Muestra el salario promedio de los empleados con 4 a 6 años de experiencia.

Función CUENTA SQL

La función SQL COUNT devuelve el número de registros en una tabla de base de datos. Si especifica SELECT COUNT(COLUMN_NAME) ... en la consulta, el resultado será el número de registros sin tener en cuenta aquellos registros en los que el valor de la columna sea NULL (indefinido). Si utiliza un asterisco como argumento e inicia una consulta SELECT COUNT(*) ..., el resultado será el número de todos los registros (filas) de la tabla.

Ejemplo 9. La base de datos y la tabla son las mismas que en los ejemplos anteriores.

Quiere saber el número de todos los empleados que reciben comisiones. La siguiente consulta devolverá el número de empleados cuyos valores de la columna Comm no son NULL:

SELECCIONE RECUENTO (Comunicación) DEL Personal

El resultado será 11.

Ejemplo 10. La base de datos y la tabla son las mismas que en los ejemplos anteriores.

Si desea averiguar el número total de registros en la tabla, utilice una consulta con un asterisco como argumento para la función CONTAR:

SELECCIONE RECUENTO(*) DEL Personal

El resultado será 17.

en el próximo ejercicio para la solución independiente necesitarás utilizar una subconsulta.

Ejemplo 11. Trabajamos con una mesa: el personal. Muestra el número de empleados en el departamento de planificación (Plains).

Funciones agregadas con SQL GROUP BY

Ahora veamos el uso de funciones agregadas junto con la declaración SQL GROUP BY. La instrucción SQL GROUP BY se utiliza para agrupar valores de resultados por columnas en una tabla de base de datos.

Ejemplo 12. Existe una base de datos del portal de publicidad. Tiene una tabla de anuncios que contiene datos sobre los anuncios enviados durante la semana. La columna Categoría contiene datos sobre categorías de anuncios grandes (por ejemplo, Bienes raíces) y la columna Partes contiene datos sobre partes más pequeñas incluidas en las categorías (por ejemplo, las partes Apartamentos y Casas de verano son partes de la categoría Bienes raíces). La columna Unidades contiene datos sobre la cantidad de anuncios enviados y la columna Dinero contiene datos sobre la cantidad de dinero recibido por enviar anuncios.

CategoríaParteUnidadesDinero
TransporteCoches110 17600
Bienes raícesApartamentos89 18690
Bienes raícesdacha57 11970
Transportemotocicletas131 20960
Materiales de construccióntableros68 7140
ElectrotecniaTelevisores127 8255
ElectrotecniaRefrigeradores137 8905
Materiales de construcciónRegímenes112 11760
OcioLibros96 6240
Bienes raícesEn casa47 9870
OcioMúsica117 7605
OcioJuegos41 2665

Utilizando la instrucción SQL GROUP BY, encuentre la cantidad de dinero ganada al publicar anuncios en cada categoría. Escribimos la siguiente solicitud.

Puede realizar procesamiento grupal generalizado de valores de campo. Esto se hace utilizando funciones agregadas. Las funciones agregadas producen un valor único para un grupo de tablas completo. SQL proporciona las siguientes funciones agregadas:

  • CONTAR– cuenta el número de filas de la tabla con valores no NULL del campo especificado como argumento.
  • SUMA– calcula la suma aritmética de todos los valores seleccionados para un campo determinado.
  • AVG– promedia todos los valores seleccionados de este campo.
  • MÁXIMO– muestra el valor más grande de todos los valores seleccionados para este campo.
  • MÍNIMO– muestra el valor más pequeño de todos los valores seleccionados para este campo.

    Usar funciones agregadas

    Las funciones agregadas se usan de manera similar a los nombres de campos en la cláusula SELECT de una consulta, con una excepción: toman nombres de campos como argumento. Sólo se pueden utilizar campos numéricos con SUMA Y AVG. CON CONTAR, MÁXIMO, Y MÍNIMO Se pueden utilizar campos numéricos y de caracteres. Cuando se usa con campos de caracteres MÁXIMO Y MÍNIMO los traducirá al equivalente ASCII. Esto significa que MÍNIMO elegirá el primero, y MÁXIMOúltimo valor en orden alfabético.

    Para encontrar el monto total de ventas en la tabla de ventas, tenemos que escribir la siguiente consulta:

    SELECCIONAR SUMA(SSum) DE Ventas

    Como resultado obtenemos:

    Esta consulta contó la cantidad de valores que no estaban en blanco en el campo SNum de la tabla Sells. Si reescribimos la consulta de la siguiente manera:

    SELECCIONAR RECUENTO (SDate) DE Ventas

    Como resultado obtenemos:

    RECUENTO DE Fecha
    4

    Se obtienen diferentes resultados de consulta al calcular lo que parece ser lo mismo porque uno de los valores del campo SDate está vacío ( NULO). Tenga cuidado al utilizar este tipo de consultas.




Arriba