sábado, 5 de octubre de 2024

Cláusula CASE de SQL

 La expresión CASE se utiliza para implementar la lógica si-entonces.

Sintaxis

CASE expresión_entrada

WHEN compara1 THEN resultado1

[WHEN compara2 THEN resultado2]...

[ELSE resultadoX]

END

CASE

WHEN condicion1 THEN resultado1

[WHEN condicion2 THEN resultado2]...

[ELSE resultadoX]

 

SELECT CASE en SQL

Observaciones
La expresión CASE simple devuelve el primer resultado cuyo valor comparaX es igual a la expresión_entrada.
La expresión CASE buscada devuelve el primer resultado cuya condiciónX es verdadera.

Ejemplo

El CASE buscado en la SELECT (Coincide con una expresión booleana) y devuelve resultados cuando una expresión booleana es VERDADERA. (Esto difiere del caso simple, en el que sólo se puede verificar la equivalencia con una entrada).

SELECT Id, IdArticulo, Precio,

CASE WHEN Precio < 10 THEN 'BARATO'

WHEN Precio < 20 THEN 'ALCANZABLE'

ELSE 'CARO'

END AS RangoPrecio

FROM Precio_Articulos 

Devolverá un resultado de este estilo:d ItemId Price PriceRating

1 100 34.5 CARO

2 145 2.3 BARATO

3 100 34.5 CARO

4 100 34.5 CARO

5 145 10 ALCANZABLE

SUM y CASE

Utilizaremos SUM junto con CASE para contar el número de filas en una columna que cumpla una condición.

CASE se puede utilizar junto con SUM para devolver un recuento de solo aquellos elementos que coincidan con una condición predefinida. El truco consiste en devolver resultados binarios que indiquen coincidencias, de modo que se devuelvan "1" para las entradas coincidentes. Se puede sumar para contar el número total de coincidencias. Dada la siguiente tabla Precio_Articulos, digamos que deseamos conocer el número total de artículos que se han categorizado como "CARO":

SELECT

COUNT(Id) AS CuentaArticulos,

SUM ( CASE

WHEN RangoPrecio = 'CARO' THEN 1

ELSE 0

END

) AS CUENTA_CAROS

FROM Precio_Articulos

 

Query Alternativa:

SELECT

COUNT(Id) as CuentaArticulos,

SUM (CASE RangoPrecio

WHEN 'CARO' THEN 1

ELSE 0

END

) AS CUENTA_CAROS

FROM Precio_Articulos

Abreviar CASE en una SELECT

Esta variante abreviada de CASE evalúa una expresión (normalmente una columna) frente a una serie de valores. Esta variante es un poco más corta y evita repetir la expresión evaluada una y otra vez.  Además aún se puede utilizar la cláusula ELSE:

SELECT Id, ArticuloId, Precio,

CASE Precio WHEN 5 THEN 'BARATO'

WHEN 15 THEN 'ALCANZABLE'

ELSE 'CARO'

END as RangoPrecio

FROM Precio_Articulos

Un poco de precaución, pues hay que tener en cuenta de que cuando se utiliza la variante corta, la declaración completa es evaluada en cada WHEN. Por ello la siguiente query:

SELECT

CASE ABS(CHECKSUM(NEWID())) % 4

WHEN 0 THEN 'Dr'

WHEN 1 THEN 'Master'

WHEN 2 THEN 'Mr'

WHEN 3 THEN 'Mrs'

END

Esta query puede producir un resultado NULL. Esto se debe a que en cada WHEN, la clausula NEWID() se vuelve a llamar con un nuevo resultado.

Es mejor utilizar esta query equivalente:

SELECT

CASE

WHEN ABS(CHECKSUM(NEWID())) % 4 = 0 THEN 'Dr'

WHEN ABS(CHECKSUM(NEWID())) % 4 = 1 THEN 'Master'

WHEN ABS(CHECKSUM(NEWID())) % 4 = 2 THEN 'Mr'

WHEN ABS(CHECKSUM(NEWID())) % 4 = 3 THEN 'Mrs'

END

Por lo tanto, se pueden omitir todos los casos WHEN y dar como resultado NULL.

Usando CASE en una cláusula UPDATE

Muestra sobre aumentos de precios:

UPDATE Tabla_Precios

SET Price = Precio *

CASE Id_Articulo

WHEN 1 THEN 1.05

WHEN 2 THEN 1.10

WHEN 3 THEN 1.15

ELSE 1.00

END

Usando CASE en la cláusula ORDER BY

CASE ordena en último lugar los valores NULL de modo que, '0' representa los valores conocidos y se clasifican en primer lugar, mientras que  '1' representa los valores NULL y se clasifican en último lugar:

SELECT ID, REGION, CIUDAD, DEPARTAMENTO, NUMERO_EMPLEADO

FROM TABLA_DEPARTAMENTOS

ORDER BY

CASE WHEN REGION IS NULL THEN 1

ELSE 0

END,

REGION

Este es un ejemplo del resultado que podría dar:

ID REGION CITY DEPARTMENT EMPLOYEES_NUMBER

10 Andalucía Almería INVESTIGACION 13

14 Andalucía Ecija VENTAS 12

9 Cantabria Torrelavega VENTAS 8

12 Castilla la Mancha Toledo MARKETING 9

5 La Rioja  Arnedo INVESTIGACION 11

15 NULL Torrejon de Ardoz MARKETING 12

4 NULL Zaragoza INNOVACION 11

2 NULL Requena RECURSOS HUMANOS 9

Para ordenar registros por el valor más bajo de 2 columnas

Vamos a imaginar que necesitamos ordenar registros por el valor más bajo de cualquiera de las dos columnas. Algunas bases de datos podrían usar una función MIN() o LEAST() de este modo (... ORDER BY MIN(Fecha1, Fecha2)), pero en SQL estándar, debemos utilizar una expresión CASE. La expresión CASE en la consulta siguiente mira las columnas Fecha1 y Fecha2, y verifica cuál tiene el valor más bajo y ordena los registros según este valor.

Por ejemplo, dados estos datos: Las fechas están en formato inglés AAAA-MM-DD

d ate1 Date2

1 2017-01-01 2017-01-31

2 2017-01-31 2017-01-03

3 2017-01-31 2017-01-02

4 2017-01-06 2017-01-31

5 2017-01-31 2017-01-05

6 2017-01-04 2017-01-31

Utilizamos esta query

SELECT Id, Fecha1, Fecha2

FROM Tabla_Fechas

ORDER BY CASE

WHEN COALESCE(Fecha1, '2000-01-01') < COALESCE(Fecha2, '2000-01-01') THEN Fecha1

ELSE Fecha2

END

El resultado sería este:

Id Date1 Date2

1 2017-01-01 2017-01-31

3 2017-01-31 2017-01-02

2 2017-01-31 2017-01-03

6 2017-01-04 2017-01-31

5 2017-01-31 2017-01-05

4 2017-01-06 2017-01-31

Como se puede ver, la fila con Id = 1 es la primera, debido a que Fecha1 tiene el registro más bajo de toda la tabla 2017. (01-01), la fila Id = 3 es la segunda porque Fecha2 es igual a 2017-01-02, que es el segundo valor más bajo de la tabla, etc.

Así que hemos ordenado los registros del 2017-01-01 al 2017-01-06 de forma ascendente y no nos importa si el valor se encuentra en la columna Fecha1 o en Fecha2.

 

sábado, 14 de septiembre de 2024

Curso de DevOps: Automatización II. Tareas y procesos clave para automatizar

Vamos a ver los pasos para identificar tareas y procesos clave que pueden automatizarse para obtener valor en nuestro negocio. El modelado de negocios es una tarea crítica. Necesitamos entender el negocio desde varias perspectivas diferentes; hablar con las partes interesadas de las empresas,  identificar a los consumidores. Y finalmente adoptar una hoja de ruta particular para poder implementar un plan de automatización del modelo de negocio que nuestro equipo de TI pueda llevar a cabo. 

Tareas y procesos clave para automatizar
 
Para empezar, debemos adoptar siempre el modelado de procesos de negocio como un campo interdisciplinario. El segundo objetivo importante es cubrir todo el ciclo de vida del proceso empresarial. Y eso sólo se puede hacer si somos capaces de identificar todas las entidades comerciales involucradas y saber cómo se realizan realmente las transiciones en los procesos comerciales. El tercer objetivo es derivar una práctica que siga un enfoque paso a paso para el modelado. Y el cuarto objetivo es que el modelado de negocios depende en gran medida de un enfoque de modelado de procesos maduro y estandarizado. 

Por lo tanto, primero debemos identificar los estándares que vamos a seguir y luego aplicar esos estándares mientras realizamos el modelado de negocios. Vamos a ver varios elementos críticos diferentes de los procesos comerciales. Necesitamos entender que el proceso de negocio siempre conducirá a algún resultado. Los procesos de negocio, contienen tres elementos importantes. El primero es el elemento empresarial. En segundo lugar está la actividad que realiza la empresa, y en tercer lugar está el punto de decisión en el que tenemos que decidir. 

Curso de DevOps. Tareas y procesos clave para automatizar
 
El proceso de negocio es un objeto que se crea internamente. Ese objeto tendrá impacto sobre el resultado. Ese resultado es un elemento de apoyo que representa al usuario en el sistema. Como resultado del proceso empresarial, obtendremos algún resultado que puede ser negativo o positivo. Y dependiendo del resultado, iniciará la acción adecuada y se informará al usuario. Luego hemos de preguntarnos, para poder hacer modelos de negocios, ¿cuáles son las tareas y procesos clave que debemos seguir? Siempre comenzamos con la identificación del proceso que nos brinde la arquitectura y nos ayude a descubrir varios componentes diferentes de este. 

Curso de DevOps. Tareas y procesos clave para automatizar

Una vez lo tengamos, analizaremos dicho proceso. Analizar el proceso significa comprender el proceso, crear un documento de resultado de análisis elaborado que pueda usarse como información para rediseñar o diseñar. Una vez que el diseño esté listo, indicaremos que es un proceso que se implementará pronto. Y se llevará a otra fase que es la fase de implementación. La fase de implementación, es decir cuando los procesos están listos para ejecutarse cada vez que se realiza una solicitud. Finalmente la ejecución de nuestros procesos producirá datos que se pueden utilizar para monitorear procesos e improvisar procesos para un mejor control. 

Curso de DevOps. Tareas y procesos clave para automatizar

El primer beneficio de la automatización del modelado de procesos de negocio es que permite una implementación sistemática, que puede documentarse y utilizarse como aprendizaje. Aumenta la capacidad para obtener un mejor control del proceso. En otras palabras, podrá derivar un mecanismo que proporcione un mejor control del proceso. El tercer beneficio de la automatización BPM es que automatiza los procesos mediante la coordinación y ejecución del modelo de procesos de negocio. Una vez que se dispone del modelo, nos proporcionará un tema para la automatización. Y, por último, también simplifica la implementación del flujo de trabajo, lo que nos ayuda a representar el flujo de trabajo empresarial correcto, que puede transformarse en un proceso de TI utilizando el modelo de negocio.

sábado, 7 de septiembre de 2024

Cláusula ALTER TABLE en SQL

Introducción

El comando ALTER en SQL se usa para modificar la columna/restricción en una tabla.

Sintaxis

ALTER TABLE [nombre_tabla] ADD [nombre_columna] [tipo de dato]

Ejemplos

Añadir Columnas

ALTER TABLE Empleados

ADD FechaIncorporacion date NOT NULL DEFAULT GetDate(),

FechaDeNacimiento date NULL 

La declaración anterior agregaría las columnas denominadas FechaIncorporacion que no puede ser NULL por defecto y fecha actual como valor por defecto y FechaDeNacimiento que si puede ser NULL en la tabla Empleados.

Cláusula ALTER TABLE en SQL


Drop Column 

ALTER TABLE Empleados

DROP COLUMN salario;

Esto no solo eliminará información de esa columna, sino que también eliminará la columna salario de la tabla Empleados (la columna ya no existirá).

Drop Constraint

ALTER TABLE Empleados

DROP CONSTRAINT SalarioBase

Esto elimina una restricción llamada SalarioBase de la definición de la tabla Empleados.

Nota: - Asegúrate de eliminar las restricciones de la columna antes de eliminar una columna.

Añadir Constraint

ALTER TABLE Empleados

ADD CONSTRAINT SalarioBase DEFAULT ((100)) FOR [Salario]

Esto agrega una restricción llamada SalarioBase que especifica un valor 
predeterminado de 100 para la columna Salario.
Se puede agregar una restricción a nivel de tabla.

Tipos de constraints

Primary Key - Clave principal: evita un registro duplicado en la tabla
Foreign Key- Clave externa: apunta a una clave principal de otra tabla.
• Not Null: evita que se introduzcan valores nulos en una columna.
Unique: identifica de forma única cada registro de la tabla.
Default: especifica un valor predeterminado
Check: limita los rangos de valores que se pueden colocar en una columna.
Para obtener más información sobre las restricciones, consulte la 
documentación de Oracle.

Alter Column

ALTER TABLE Empleados

ALTER COLUMN FechaIncorporacion DATETIME NOT NULL DEFAULT (GETDATE())

Esta consulta alterará el tipo de datos de la columna de FechaIncorporacion 
y lo cambiará de fecha simple a tipo DATETIME y establece el valor 
predeterminado en la fecha actual.

Añadir Primary Key

ALTER TABLE EMPLEADOS ADD pk_empleadoID PRIMARY KEY (ID)

Esto agregará una clave principal a la tabla Empleados en el campo ID. 
Incluyendo más de una columna en el paréntesis junto con el ID, 
se creará una clave primaria compuesta. Al agregar más de una columna, 
los nombres de las columnas deben estar separados por comas.

 ALTER TABLE EMPLEADOS ADD pk_empleadoID PRIMARY KEY (ID, FNombre)

 

sábado, 24 de agosto de 2024

Curso de DevOps: Automatización I. Ciclos de entrega de IT automatizados

Vamos a describir el ciclo automatizado de entrega de IT y su impacto en la gestión y el monitoreo de IT. Las herramientas de supervisión y gestión de IT automatizan tareas repetitivas específicamente para profesionales de IT. El ciclo de entrega de IT comienza con la planificación, donde debemos planificar cuáles son todas las actividades comerciales o actividades de soporte que deben automatizarse. La planificación nos brinda una manera de aprovisionar y configurar. Lo que nos da la oportunidad de identificar el componente de la aplicación, el de la infraestructura y el del servicio que se pueden aprovisionar y configurar para admitir la automatización.

Ciclos de entrega de IT automatizados

El tercer paso es recopilar datos operativos, porque eso nos ayudará a probar nuestra estrategia de automatización. Una vez que hayamos recopilado datos operativos de su implementación, podemos utilizar esos datos para el seguimiento. Y el monitoreo nos permite el análisis e información adecuados que el equipo de operaciones puede utilizar para improvisar aún más la automatización.

Así es como se puede implementar IT automatizada. A continuación, intentaremos comprender los impactos de la automatización de IT en la gestión.

 

impactos de la automatización de IT en la gestión

Hay impactos positivos, también hay impactos negativos, esto depende de varios factores diferentes. Veremos son los impactos críticos de la automatización de IT en la gestión. En primer lugar, se basa en herramientas de software para definir el alcance de la automatización. Ese es uno de los impactos de la automatización de IT en la gestión, donde se depende mucho de las herramientas. En segundo lugar, reemplaza una serie de acciones entre los administradores y el entorno de IT, eliminando todas las tareas manuales que deben realizarse. El tercer impacto es que el sistema se vuelve capaz de desencadenar acciones de gestión automatizadas dependiendo de ciertas condiciones configuradas. En cuarto lugar, no requiere intervención manual para la conmutación por error si ha adoptado soporte de conmutación por error automatizado. También debemos comprender que la automatización de IT permite una gestión automatizada de la escala. Que se basa en condiciones y eventos prescritos, que pueden iniciar actividades de ampliación o reducción de escala. Y, por último, permite activadores automatizados de limpieza basados en reglas. Donde podemos definir varias reglas y esas reglas invocarán acciones para administrar los recursos para optimizarlos.

Es necesario entender el papel de los ingenieros de automatización en nuestra empresa. El ingeniero de automatización es un rol que garantiza que se facilite la creación de prácticas de automatización.

papel de los ingenieros de automatización

También se encargan de monitorear o controlar la producción y la entrega general, que pueden automatizarse. Son responsables de documentar todas las especificaciones de diseño relevantes para la automatización. Y aparte de eso, también desempeñan un papel importante a la hora de respaldar y ofrecer la automatización. El ingeniero de automatización también desempeña un papel esencial en la identificación de la causa raíz que les ayuda a solucionar errores de automatización. Como ingenieros de soporte, debemos tener una visión de administración para comprender el ciclo de vida del error. Siempre que se identifiquemos un nuevo error, como ingeniero de soporte lo escribiremos como un nuevo error. Después, debemos asignarlo al ingeniero de soporte que se supone debe manejarlo.

 

errores de automatización

Y el estado de ese error ahora cambia de error nuevo a error asignado. Una vez asignado el error, pude tomar dos estados diferentes: el primero rechazado y el segundo abierto. Se rechaza porque al ingeniero de soporte al que se le asignó ese error en particular ya se le asignó anteriormente el mismo error, lo que significa que está duplicado. Otro motivo de rechazo es que se aplace porque depende de algún otro error. Además de rechazado, tiene los estados abierto y reabierto. El ingeniero de soporte revisa el error abierto, le aplica las correcciones correctas y cambia el estado a solucionado. Hecho esto, se prueba, y si todo está bien, se cierra. Pero sí, después de solucionarlo, si el impacto aún persiste, pasa a un estado llamado reapertura. Así es como podemos ajustar los estados de del error según nuestras necesidades. Para derivar el ciclo de vida de gestión de errores adecuado para nuestra aplicación o empresa.

 

sábado, 3 de agosto de 2024

Otros conceptos de SQL

 Renombrar las columnas, utilizando AS

Podemos cambiar el nombre a las columnas. Así, la llamada a un id se muestra siempre como id en el resultado. Podemos cambiarle el nombre:

SELECT  empleado.id AS id_persona,  departamento.id AS id_departamento FROM empleado JOIN departamento  ON empleado.id = departamento.id_pertenece;

Después del nombre de la columna, por ejemplo, empleado.id, utilizamos la nueva palabra clave AS y ponemos el nuevo nombre después de ella (id_persona). Podemos repetir este proceso con todas las columnas.

Otros conceptos de SQL


El nuevo nombre solo es un alias, lo que significa que es temporal y no cambia el nombre real de la columna en la base de datos. Solo influye en cómo la columna se muestra en el resultado de dicha consulta. Esta técnica se suele utilizar cuando hay varias columnas con el mismo nombre que proceden de diferentes tablas. Normalmente, cuando SQL muestra las columnas en el resultado, no hay información sobre las tablas de las que forman parte cada una de ellas.

En nuestro ejemplo, teníamos dos columnas id, así que, las renombramos como id_persona e id_departamento, respectivamente. Si ahora vemos las columnas en el resultado, sabremos a qué tabla pertenece cada columna.

Filtrar tablas combinadas

Vamos a ver cómo filtrar aún más los resultados:

SELECT  empleado.id,  departamento.nombre FROM empleado JOIN departamento   ON empleado.id =  departamento.id_pertenece WHERE empleado.edad < 25;

La cláusula WHERE sirve para filtrar las filas en las que el propietario sea menor de 25 años. Es necesario asegurarse de que se incluye el nombre de la tabla en la condición (empleado.edad).

Ordenar filas con ORDER BY

La secuencia en la que aparecen las filas es arbitraria, y cada base de datos puede comportarse de forma diferente. Incluso se puede ejecutar la misma instrucción de SQL varias veces y obtener un orden diferente cada vez, salvo que se pida a la base de datos que ordene las filas, obviamente.

SELECT * FROM pedidos ORDER BY id_cliente;

SELECT * FROM pedidos WHERE id_cliente = 100 ORDER BY importe_total;

SELECT * FROM empleados WHERE fecha = 2011 ORDER BY salario;

SELECT * FROM pedidos ORDER BY importe_total ASC;

También podemos invertir el orden y hacer que los valores más altos aparezcan primero.

SELECT * FROM pedidos ORDER BY importe_total DESC;

SELECT * FROM empleados ORDER BY apellido DESC;

Ordenar en base a varias columnas

Los resultados se pueden ordenar en base a más de una columna y, cada una de ellas, puede estar ordenada de forma diferente:

SELECT * FROM pedidos ORDER BY id_cliente ASC, importe_total DESC;

Como se puede ver, los resultados se ordenarán, primero, en orden ascendente (los valores más bajos primero) según la columna id_cliente y, luego, para cada id_cliente, los pedidos se ordenarán en orden descendente (los valores más grandes primero) según la columna importe_total.

Resultados duplicados

De forma predeterminada, la base de datos devuelve todas las filas que coinciden con los criterios especificados. Esto es lo que normalmente queremos, pero hay casos en los que podemos querer cambiar este comportamiento.

Imagina la siguiente situación: queremos obtener los números de cliente de todos los clientes que alguna vez hayan hecho un pedido. Podríamos utilizar la siguiente query:

SELECT id_cliente FROM pedidos;

¿Cuál es el problema del código en este caso?

Hay muchas filas con el mismo id_cliente, por lo que cada cliente aparece muchas veces en los resultados.

En nuestro ejemplo de pedidos, si un cliente hubiera hecho muchos pedidos, el ID de ese cliente se mostraría muchas veces en los resultados. Para ello hacemos:

SELECT DISTINCT id_cliente FROM pedidos;

Antes del nombre de la columna, hemos añadido la palabra DISTINCT. Ahora, la base de datos eliminará los duplicados y solo mostrará los valores únicos. Cada id_cliente aparecerá solo una vez.

Seleccionar valores únicos de varias columnas

También se puede utilizar DISTINCT en un grupo de columnas. Observa el siguiente código:

SELECT DISTINCT  id_cliente,   fecha_de_pedido FROM pedidos;

Un cliente puede hacer muchos pedidos cada día, pero si solo queremos saber en qué días cada cliente hizo al menos un pedido, la consulta anterior nos dará el resultado que deseamos.

COUNT Contar las filas

Es posible calcular las estadísticas de varias filas. Esta operación se llama agregación.

SELECT COUNT(*) FROM empleados;

En lugar del asterisco (*), que significa "todo", ponemos la expresión COUNT(*).

COUNT(*) es una función. Las funciones de SQL siempre tienen un nombre seguido de un paréntesis. En los paréntesis, se puede poner la información que la función necesita para funcionar. Por ejemplo, COUNT() calcula el número de filas especificado en el paréntesis.

En este caso, utilizamos COUNT(*), que significa "contar todas las filas". Como resultado, solo obtendremos la cantidad total de filas que tiene la tabla empleados, en vez de su contenido.

Contar las filas e ignorar los valores NULL

Podemos pedir a la base de datos que cuente los valores de una columna específica, por ejemplo, de la siguiente manera:

SELECT COUNT(id_empleado) FROM empleados;

¿Cuál es la diferencia entre COUNT(*) y COUNT(id_empleado)? Pues, la primera opción cuenta todas las filas de la tabla y, la segunda, cuenta todas las filas en las que la columna id_cliente tiene un valor que no sea nulo. En otras palabras, si hay un NULL en la columna id_cliente, esa fila no se contará.

Contar los valores únicos de una columna

También podemos añadir la palabra clave DISTINCT a nuestra función COUNT() de la siguiente manera:

SELECT COUNT(DISTINCT id_cliente) AS clientes_unicos FROM pedidos;

Esta vez, contamos todas las filas que tienen valores distintos en la columna id_cliente. En otras palabras, esta instrucción nos dice cuántos clientes diferentes hicieron un pedido hasta el momento. Si un cliente realizó 5 pedidos, solo se contará una vez.

Otros conceptos de SQL


Obtener los valores mínimo y máximo

SELECT MIN(importe_total) FROM pedidos;

La función MIN(importe_total) devuelve el valor más pequeño de la columna importe_total. Así, podemos saber el pedido más barato de nuestra tabla.

También, se puede utilizar una función similar llamada MAX(), que devuelve el valor más alto de la columna especificada.

Obtener el promedio

SELECT AVG(importe_total) FROM pedidos WHERE id_cliente = 100;

La función AVG() devuelve el promedio de la columna especificada.

En el ejemplo de arriba se obtiene el promedio del pedido del cliente con id 100.

Obtener la suma

SELECT SUM(importe_total) FROM pedidos WHERE id_cliente = 100;

La instrucción anterior devolverá la suma total de los importes todos los pedidos realizados por el cliente con id 100.