Professional Documents
Culture Documents
Funciones de agregado
Procedimientos almacenados
Consultas
Tablas temporales
Cursores
Variable tipo tabla
Commit, rolback, errores, try cach.
Presenta:
Docente:
Ing. Cesar Cedeo
Curso:
Quinto Nivel B
Funciones de Agregacin
Las funciones de agregacin son funciones que toman una coleccin (un conjunto o
multiconjunto) de valores como entrada y producen un nico valor como salida.
SQL proporciona cinco funciones de agregacin primitivas:
Media: avg
Mnimo: min
Mximo: max
Total: sum
Cuenta: count
La entrada a sum y avg debe ser una coleccin de nmeros, pero los otros operadores
pueden operar sobre colecciones de datos de tipo no numrico, tales como las cadenas.
Media: avg
Devuelve el promedio de los valores de un grupo. Se omiten los valores null.
Sintaxis
Ejemplo
A. Usar las funciones SUM y AVG para los clculos
En el ejemplo siguiente se calcula el promedio de horas de vacaciones y la suma de horas
de baja por enfermedad que han utilizado los vicepresidentes de Adventure Works
Cycles. Cada una de estas funciones de agregado produce un valor nico de resumen para
todas las filas recuperadas. En el ejemplo se usa la base de datos AdventureWorks2012.
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';
B.
Usar las funciones
SUM y AVG con una clusula
GROUP BY
Cuando se utiliza con una clusula GROUP BY, cada funcin de agregado produce un solo
valor para cada grupo, en vez de para toda la tabla. En el ejemplo siguiente se obtienen
valores de resumen para cada territorio de ventas de la base de datos
AdventureWorks2012. El resumen muestra el promedio de bonificaciones recibidas por
los vendedores de cada territorio y la suma de las ventas realizadas hasta la fecha en cada
territorio.
SELECT TerritoryID, AVG(Bonus)as 'Average bonus',
SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
cada territorio en funcin del ao de ventas. Observe que para TerritoryID 1, solo hay dos
filas para el ao de ventas 2005, que representan los dos vendedores con ventas durante
ese ao. Se calculan las ventas medias de estas dos filas y la tercera fila que representa
las ventas durante el ao 2006 se incluye en el clculo.
Mnimo: min
Devuelve el valor mnimo de la expresin. Puede ir seguida de la clusula OVER.
Sintaxis
MIN ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )
Tipos devueltos
Comentarios
MIN pasa por alto los valores NULL.
En el caso de columnas de datos de caracteres, MIN busca el valor ms bajo en la
secuencia de ordenacin.
MIN es una funcin determinista cuando se utiliza sin las clusulas OVER y ORDER BY. Es
no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.
Ejemplos
A. Ejemplo sencillo
En el ejemplo siguiente se devuelve la tasa de impuestos ms baja (mnima).
SELECT MIN(TaxRate)
FROM Sales.SalesTaxRate;
GO
Mximo: Max
Devuelve el valor mximo de la expresin.
Sintaxis
Tipos devueltos
Devuelve un valor igual a expresin.
Comentarios
MAX pasa por alto los valores NULL.
Para las columnas de caracteres, MAX busca el valor ms alto de la secuencia de
intercalacin.
MAX es una funcin determinista cuando se utiliza sin las clusulas OVER y ORDER BY. Es
no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.
Ejemplos
A. Ejemplo sencillo
El ejemplo siguiente devuelve el tipo impositivo mayor (mximo) de la base de datos
AdventureWorks2012.
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO
Total: sum
Devuelve la suma de todos los valores o solo de los valores DISTINCT de la expresin. SUM
solo puede utilizarse con columnas numricas. Se omiten los valores NULL.
Sintaxis
SUM ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )
Comentarios
SUM es una funcin determinista cuando se utiliza con las clusulas OVER y ORDER BY.
Es no determinista si se especifica con las clusulas OVER y ORDER BY. Para obtener ms
informacin.
Ejemplos
A. Usar SUM para devolver datos de resumen
En los ejemplos siguientes se muestra cmo usar la funcin SUM para devolver datos de
resumen de la base de datos AdventureWorks2012.
Cuenta: count
Devuelve el nmero de elementos de un grupo. COUNT funciona como la funcin
COUNT_BIG. La nica diferencia entre ambas funciones est en los valores devueltos.
COUNT siempre devuelve un valor de tipo de datos int. COUNT_BIG siempre devuelve un
valor de tipo de datos bigint.
Sintaxis
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * }
)
OVER ( [ partition_by_clause ]
order_by_clause )
Ejemplos
A. Usar COUNT y DISTINCT
En el ejemplo siguiente se muestra el nmero de cargos diferentes que puede tener un
empleado que trabaja en Adventure Works Cycles.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
B. Usar COUNT(*)
En el ejemplo siguiente se muestra el nmero total de empleados que trabajan en
Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
PROCEDIMIENTOS ALMACENADOS
Procedimiento almacenado para ingresar datos a la tabla empleado
create procedure insertarEmpleado
@Nombre Varchar(50),
@Apellido Varchar(50),
@Sueldo Decimal(5,2)
as
insert into dbo.Empleado(Nombre,Apellido,Sueldo)
values(@Nombre,@Apellido,@Sueldo);
go
Ejecucin del procedimiento almacenado
execute insertarEmpleado 'Anthony','Arteaga',200.00
Procedimiento almacenado para actualizar datos a la tabla empleado
create procedure actualizarEmpleado
@id int,
@Nombres Varchar(50),
@Apellido Varchar(50),
@Sueldo Decimal(5,2)
as
update dbo.Empleado set Nombre=@Nombres,
Apellido=@Apellido,Sueldo=@Sueldo where id=@id;
go
TABLAS TEMPORALES
Tabla temporal seleccionando todos las propiedades y datos de la tabla empleado
El nombre de la tabla temporal empieza con # siempre
select * into #Empleado1 from dbo.Empleado
go
Tabla temporal seleccionando todas las propiedades de la tabla empleado
El nombre de la tabla temporal empieza con # siempre
create table #Empleado2 (
id int identity (1,1) NOT NULL,
Nombre varchar (50),
Apellido varchar (50),
SueldoPromedio decimal(5,2)
constraint empleado_pk primary key (id)
);
go
Cursores
create table Empleado (
id int identity (1,1) NOT NULL,
Nombre varchar (50),
Apellido varchar (50),
Email Varchar(50),
Sueldo decimal(5,2)
constraint empleado_pk primary key (id)
);
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Anthony','Arteaga',200.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Borracho','Pinargote',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Wendy','Pinargote',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Kerly','Delgado',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Juanito','Perez',300.00)
insert into dbo.Empleado(Nombre,Apellido,Sueldo)values('Gonzalo','Zambrano',300.00)
Creacin del cursor
declare @id int
declare @nombre varchar(50)
declare @apellido varchar(50)
declare cursor1 scroll cursor for
select id,Nombre,Apellido from Empleado
open cursor1
fetch next from cursor1 into @id,@nombre, @apellido
while @@fetch_status=0
Begin
update Empleado
set Email=
Lower(SUBSTRING(@nombre,1,1)+@Apellido+'@hotmail.com')
where id=@id;
fetch next from cursor1 into @id, @nombre, @apellido
END
close cursor1
Deallocate cursor1
VARIABLE DE TIPO TABLA
Se crea una variable tipo tabla con sus columnas
El nombre de la tabla siempre empieza con el @
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
Ejemplo de rollback
BEGIN TRANSACTION OutOfProc; /* Starts a transaction */
GO
EXEC insertarCliente 1315604366, 'Christian','Pinargote','0992323734','Manta',
5;
SELECT * FROM Cliente;
GO si sucede un error en la transaccin elimina los cambios hechos antes
ROLLBACK TRANSACTION OutOfProc; /* Rolls back the outertransaction */
GO
Ejemplo de rollback con error
declare @Error int
begin tran
update Cliente set dinero=10
where numCedula=1315604366
insert into Cliente values (1315604361,
'Gonzalo','Pinargote','0992323734','Manta', 10)
set @Error=@Error
if(@Error<>0)
begin tran
rollback si sucede un error en la transaccin elimina los cambios
hechos antes
print 'No se pudo completar la transaccin debido a un error'
go
TRY...CATCH (Transact-SQL)
Implementa un mecanismo de control de errores para Transact-SQL que es similar al
control de excepciones en los lenguajes Microsoft Visual C# y Microsoft Visual C++. Se
puede incluir un grupo de instrucciones Transact-SQL en un bloque TRY. Si se produce un
error en el bloque TRY, el control se transfiere a otro grupo de instrucciones que est
incluido en un bloque CATCH.
Sintaxis
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[;]