Agregar parciales y Filtrar resultados

Calculando subtotales

Queremos consultar el número de compras de cada cliente. Una manera de hacerlo sería ejecutando la sentencia select para cada cliente lo que sería un arduo trabajo para una base de datos que contenga cientos o miles de clientes. Para realizar estas operaciones SQL dispone de la palabra clave group by con el que podemos obtener subtotales en base a un criterio de agrupación.

Sintaxis:

Donde:

  • col_agrupada_x.- Columna cuyos valores se generarán los subtotales. Por ejemplo si la columna es sólo  NUM_SOCIO de la tabla VENTAS, la consulta generará los resultados para cada socio. En cambio si las columnas son NUM_SOCIO y PRODUCTO, se calcularán los valores para cada pareja de socios y producto.
  • funcion_x.- Cualquier función de agregación (sum, count, min).
  • […].- Resto de la sentencia incluyendo join, where, etc.
  • col_agrupada_x.- Tras group by debemos incluir los mismos campos clave de agregación que en la parte select.

Ejemplo, compras realizadas por cada socio:

Ejemplo, calcular las veces y cantidad que se adquirió un producto:

Seleccionar grupos, having

Hemos visto que where filtra las filas que queremos consultar, having mostrará los subtotales colocándose después de group by.

Sintaxis:

Donde:

  • condición.- Son condiciones unidas por or o and que deben cumplir los grupos para ser incluidos en la lista consultada. Solamente podemos usar funciones de agregación en estas condiciones.

Ejemplo, mostrar los socios que han hecho dos o más compras:

Ejemplo, buscar productos que se hayan comprado más de una vez y que su venta mínima sea igual o mayor de tres unidades:

Subconsultas

Una subconsulta es una consulta anidada dentro de otra sentencia SQL, se utiliza para realizar búsquedas complejas o para otras operaciones como, por ejemplo, insertar en una tabla el resultado de una sentencia select. Para realizar una subconsulta lo tenemos que poner entre paréntesis “()“.

Ejemplo:

Anidando las consultas

El ejemplo anterior ha generado un único valor, pero, podemos trabajar también con otras que devuelvan varios registros y que estos a su vez se utilicen en una consulta posterior.

Veamos varios ejemplos para obtener las compras de todos los clientes que hayan hecho más compras que el NUM_SOCIO 1001:

  • Consultar el número de compras del socio 1001.
  • Busca los socios que hayan realizado más compras que el socio 1001.
  • Consultar la tabla de ventas para esos socios.

Inserción masiva de registros

Además de realizar consultas y búsquedas complejas, podemos utilizar subconsultas para insertar varios registros a la vez en una tabla de datos. La mejor opción es realizar una consulta a la tabla de clientes e insertar el resultado en una nueva.

Sintaxis:

Donde:

  • tabla.- Nombre de la tabla donde se almacenarán los datos.
  • columnas (columna_1, columna_n).- Nombre de las columnas separadas por comas “,” donde queremos guardar los valores. Opcional.
  • subconsulta.- Sentencia SQL donde el resultado se insertará en “tabla“. Si se especifican columnas debe devolver tantas como las indicadas, si no, debe recuperar las mismas columnas y tipos que las de la tabla de destino. En SQLite la subconsulta no puede rodearse entre paréntesis “( )” (en otras bases de datos e normal utilizar los paréntesis).

Ejemplo:

Vamos a dar e alta en CLIENTES_WEB todos los de la tabla CLIENTES que no estén habilitados en el comercio on-line. Primero vemos los clientes que están habilitados.

Damos de alta a los CLIENTES_WEB desde CLIENTES.

volvemos a consultar la tabla CLIENTES_WEB.

Vemos el nuevo resultado.

Generando vistas

 

 

Anuncios