Ir al contenido principal

Entradas

Desbordando AVG y SUM: Cuando SQL Server se queda sin dedos para sumar

Entre las múltiples funciones de agregado que nos ofrece SQL Server, nos encontramos con dos que, probablemente junto con COUNT(), son las más usadas: SUM() y AVG().

El resultado que producen ambas parece bastante obvio: SUM() devuelve la suma de valores de la columna que le indiquemos a la función, mientras que AVG() nos devolverá el valor promedio de los datos de la columna deseada.

Así pues, si tenemos una tabla de pedidos con la columna Importe, que indica el importe final de cada pedido sin decimales (tipo de datos int), si queremos saber la suma de los importes de todos los pedidos, bastará con realizar la siguiente consulta:

SELECT SUM(Importe) FROM dbo.Pedidos;
Análogamente, si queremos conocer el valor promedio de los pedidos:

SELECT AVG(Importe) FROM dbo.Pedidos;
El resultado devuelto por ambas será un entero (int) con la suma y el promedio respectivamente.

"Estos números son muy grandes, no sé contar tanto"
Estas funciones probablemente no nos fallar…
Entradas recientes

Usa el esquema en tus consultas o rompe tu código sin darte cuenta

Hace ya algún tiempo contábamos en otra entrada de este blog la importancia que tiene nombrar correctamente a los objetos de una base de datos a la hora de realizar las consultas: siempre debemos usar el formato esquema.nombre.

Los motivos quedaban claros entonces: evitar problemas de rendimiento en la compilación de las consultas debidos al proceso de resolución de nombres y evitar errores si el esquema por defecto de un usuario es distinto a "dbo" o "NULL".

Si bien estos errores pueden ocasionar algún quebradero de cabeza, su resolución es bastante sencilla, tal y como se explica en el artículo anterior. Sin embargo, añadimos ahora un nuevo caso que podría ser más problemático, ya que podemos generar un error que pasase inadvertido, devolviendo registros incorrectos en nuestras consultas.

Cuando trabajamos con más de un esquema -cosa que deberíamos hacer no sólo por motivos de organización de nuestros objetos, sino también para aplicar permisos sobre ellos más á…

UNION vs UNION ALL: Entiende las diferencias

SQL Server ofrece el operador UNION para, según la MSDN, "combinar los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión."

Para que el motor de base de datos pueda combinar el resultado de distintas consultas, éstas deben respetar el número y orden de las columnas implicadas. Asimismo, las columnas equivalentes en posición deben serlo también compatibles en tipos de datos.

El operador UNION presenta un modificador o argumento: ALL. Éste se escribe a continuación de UNION, así: UNION ALL. Cuando se especifica, SQL Server devuelve todas las filas de todas las consultas combinadas, incluyendo posibles duplicados.

Ahí radica justamente la diferencia entre UNION y UNION ALL: El operador de unión elimina las filas duplicadas cuando combina los resultados de las consultas implicadas. Sin embargo, con el argumento ALL, los duplicados se mantienen.

¿Cuándo uso UNION y cuándo UNION ALL? El primer…

Cómo averiguar el propietario (Owner) de una base de datos en SQL Server

En ocasiones necesitamos conocer quién es el propietario de una base de datos. Normalmente podemos acceder a esta información a través del SQL Server Management Studio, consultando las propiedades de la base de datos.

Para ello, buscamos la base de datos que queramos consultar en el árbol de bases de datos del Object Explorer y hacemos clic derecho sobre ella. A continuación, elegimos la última opción del menú contextual que nos aparece: Propiedades. Veremos esta ventana:


Sin embargo, en ocasiones no tenemos acceso a esta ventana de propiedades o, simplemente, queremos consultar el propietario de todas las bases de datos de un servidor. Para ello disponemos del siguiente script T-SQL, que nos proporcionará la información deseada:

La primera columna nos dirá el propietario de la base de datos (en concreto, su login o nombre de usuario). A partir de este script, podemos filtrar por base de datos, mediante el campo "name":

O podemos conocer todas las bases de datos cuyo prop…

Notas del SQL Saturday Barcelona (#338): Conocimiento compartido

Volvemos de Barcelona con la sensación de haber sido partícipes de una experiencia enriquecedora: el primer SQL Saturday celebrado en España ha sido todo un éxito.
La encomiable labor organizativa del grupo PASS España -encabezados por Rubén Pertusa-, la generosidad a la hora de compartir su conocimiento de los expertos venidos de diversos países para realizar sus excelentes ponencias y el entusiasmo de todos los profesionales registrados, allí reunidos durante más de 10 horas de sesiones, con un gran afán por compartir y aprender han hecho del SQL Saturday Barcelona un evento del que salimos con un bagaje positivo y muchas ganas de repetir.
Como bien expuso Fernando G. Guerrero, CEO de SolidQ -uno de los sponsors del evento-, "la curiosidad es lo que nos mueve". El apetito por aprender, las ganas de compartir experiencias y conocer a quienes también las viven son el motor de los SQL Saturday. Nada más acertado que el lema de "Share what you know, learn what you don…

Humor y SQL Server: inyección SQL y cómo evitarla (no llames a tu hijo DROP TABLE)

El portal xkcd publica esta viñeta sobre inyección de código en SQL Server:

Tratado con gran sentido del humor, esta cómica situación nos pone en alerta frente a la inyección de código SQL Server, que puede suponer una vulnerabilidad seria para nuestras bases de datos.

Una aplicación que no compruebe los datos que en ella se introducen a través de aplicaciones externas está expuesta al desastre. En el cómic se introduce una instrucción DROP TABLE en medio del supuesto nombre de un niño inscrito en un colegio. Al introducir el falso nombre en el sistema informático del centro, el resultado es catastrófico: la tabla de estudiantes es eliminada por completo.

La Wikipedia presenta un ejemplo similar para demostrar en qué consiste la inyección SQL Server, así como diversas soluciones a adoptar, dependiendo del lenguaje de programación de la aplicación:
"Por ejemplo, asumiendo que el siguiente código reside en una aplicación web y que existe un parámetro "nombreUsuario" que …

¡Nos vemos en el SQLSaturday Barcelona!

¡Por primera vez llegan a España los famosos eventos SQLSaturday! Será en Barcelona, el próximo sábado 25 de octubre de 2014.

Ya me he registrado en el evento. Será una buena oportunidad para conocer a otros profesionales de SQL Server y compartir experiencias y conocimiento, todo ello mientras aprendemos de los mejores expertos, incluidos algunos MVP y MCM de Microsoft, en las diferentes sesiones programadas.
@jaimeml is attending SQLSaturday #338 - Barcelona 2014 #sqlsatBarcelona
— PASS SQLSaturday (@sqlsat) junio 28, 2014 SQLSaturday es un evento gratuito de un día de duración para profesionales y futuros profesionales relacionados con SQL Server, Big Data y Business Intelligence; organizado por la Asociación de Profesionales de SQL Server (PASS). Se han celebrado más de 300 eventos SQLSaturday alrededor de todo el mundo (el de Barcelona será el 338) y ésta va a ser la primera edición en España. El plazo de registro lleva abierto algunos días, en los que ya se han inscrito más de …