Advanced SQL Queries for Veterinary Management Systems
Enviado por Chuletator online y clasificado en Inglés
Escrito el en
español con un tamaño de 3,98 KB
Advanced SQL Querying for Veterinary Databases
This document outlines several advanced SQL queries designed to manage and extract meaningful data from a veterinary clinic database. These queries cover aspects such as staff performance, financial statistics, and complex data filtering.
1. Veterinarians with Low Appointment Volume
The following query identifies veterinarians managed by a specific supervisor ('COL06') who have handled fewer than two appointments. This is useful for monitoring workload distribution.
SELECT
TRIM(v.nombre) || ' ' || TRIM(v.apellidos) AS "Veterinario",
v.especialidad AS "Especialidad",
COUNT(c.fechahora) AS "Total citas"
FROM VETERINARIO v
LEFT JOIN CITA c ON c.numColegiado = v.numColegiado
WHERE v.numcolegiadojefe = 'COL06'
GROUP BY v.numColegiado, v.nombre, v.apellidos, v.especialidad
HAVING COUNT(c.fechaHora) < 2
ORDER BY "Total citas" ASC, "Veterinario" ASC;2. Specialty Cost Statistics and Financial Thresholds
This query calculates the average cost and total number of appointments per specialty, filtering for those that exceed the average cost recorded during the first week of June 2026.
SELECT
v.especialidad AS "Especialidad",
COUNT(c.fechahora) AS "Numero citas",
ROUND(AVG(c.coste), 2) AS "Coste medio"
FROM CITA c
JOIN VETERINARIO v ON v.numColegiado = c.numColegiado
GROUP BY v.especialidad
HAVING AVG(c.coste) > (SELECT AVG(coste) FROM CITA WHERE fechahora BETWEEN TO_DATE('01/06/2026', 'DD/MM/YYYY') AND TO_DATE('07/06/2026', 'DD/MM/YYYY'))
ORDER BY "Coste medio" DESC;3. Organizational Hierarchy and Specialty Filtering
To understand the reporting structure, this query lists veterinarians and their respective supervisors, excluding those in Surgery or Traumatology.
SELECT
TRIM(v.nombre) || ' ' || TRIM(v.apellidos) AS "Veterinario",
NVL2(v.numcolegiadojefe, (TRIM(j.nombre) || ' ' || TRIM(j.apellidos)), '-') AS "Jefe"
FROM VETERINARIO v
LEFT JOIN VETERINARIO j ON j.numColegiado = v.numColegiadoJefe
WHERE v.especialidad NOT IN ('Cirugia', 'Traumatologia')
ORDER BY "Veterinario" ASC;4. Species Treated by Supervisory Staff
This query identifies the distinct species treated by veterinarians who hold supervisory roles, excluding a specific colegiado ('COL01').
SELECT DISTINCT
m.especie AS "Especie"
FROM MASCOTA m
JOIN CITA c ON c.chipmascota = m.chip
JOIN VETERINARIO v ON v.numcolegiadojefe = c.numcolegiado
WHERE c.numcolegiado != 'COL01'
ORDER BY "Especie";5. Multi-Species Veterinarians (Dogs and Cats)
This query finds veterinarians who have treated both dogs and cats, demonstrating the use of intersecting subqueries.
SELECT
numcolegiado AS "Numero colegiado",
TRIM(UPPER(nombre)) AS "Nombre"
FROM VETERINARIO
WHERE numcolegiado IN (SELECT numcolegiado FROM cita c JOIN mascota m ON c.chipmascota = m.chip WHERE m.especie = 'Perro')
AND numcolegiado IN (SELECT numcolegiado FROM cita c JOIN mascota m ON c.chipmascota = m.chip WHERE m.especie = 'Gato');6. Top Spending Pets: View Creation
Finally, we create a SQL View to track the top 3 pets (older than 4 years) with the highest total expenditure, excluding owners with the surname 'Ruiz'.
CREATE VIEW v_gasto AS
SELECT
m.chip AS "Chip",
TRIM(m.nombre) AS "Mascota",
m.especie AS "Especie",
SUM(c.coste) AS "Gasto total"
FROM CITA c
JOIN MASCOTA m ON m.chip = c.chipMascota
JOIN PROPIETARIO p ON p.dni = m.dniPropietario
WHERE m.fechaNacimiento IS NOT NULL
AND MONTHS_BETWEEN(SYSDATE, m.fechaNacimiento) / 12 > 4
AND TRIM(p.apellidos) NOT LIKE 'Ruiz%'
GROUP BY m.chip, m.nombre, m.especie
ORDER BY "Gasto total" DESC, "Mascota" ASC
FETCH FIRST 3 ROWS ONLY;