Lo puedes resolver agregando un AND carrera='Carrera a filtrar'
al final.
Ejemplo:
SQL Fiddle
MySQL 5.6 Schema Setup:
CREATE TABLE tesis
(`id_tesis` int, `nombre_tesis` varchar(70), `carrera` varchar(55))
;
INSERT INTO tesis
(`id_tesis`, `nombre_tesis`, `carrera`)
VALUES
(16, 'Análisis...', 'Lic. en Criminología'),
(17, 'Tesis en...', 'Licenciatura en Administración'),
(18, 'Litigación en...', 'Maestría en...'),
(19, 'Tesis en...', 'Licenciatura en Administración'),
(26, 'La intranet...', 'Ingeniería ITC'),
(28, 'Tesis en...', 'Licenciatura en Administración'),
(29, 'Litigación en...', 'Maestría en...')
;
Query 1:
SELECT carrera
FROM tesis
WHERE carrera IN (
SELECT carrera
FROM tesis
GROUP BY carrera
HAVING COUNT(id_tesis) > 1
)
AND carrera='Licenciatura en Administración'
Results:
| carrera |
|--------------------------------|
| Licenciatura en Administración |
| Licenciatura en Administración |
| Licenciatura en Administración |
Nota:
De todos modos yo tendría una tabla llamada carreras
relacionada con la tabla tesis
mediante llave foránea. Como lo tienes ahora no es muy práctico, para consultas como estas o para controlar el tamaño de la bd, sobre todo si tienes que manejar muchos datos. El mantenimiento también se dificulta. Imagina que hay un error de ortografía en una de las filas de la columna carrera
, pues ya por ese error no te filtraría bien los datos, etc, etc, etc.
Aquí te dejo otro fiddle parecido al anterior. En la primera parte dejo todo como antes, pero introduzco a propósito una tesis id 30
con datos erróneos. Es evidente que sería de la carrera Licenciatura en Administración, pero como ha sido digitada con errores la consulta no la encontrará debido a esos errores ortográficos.
En la segunda parte del fiddle implemento un modelo relacional, introduciendo las carreras en su tabla propia. En la consulta se usa un JOIN y la tabla tesis_relacional
no tendrá que tener repetido una y otra vez el nombre de la carrera, sino un número que identifica a cada carrera. Estamos hablando de ahorro de espacio, de tiempo de mantenimiento, mejor detección de errores... y simplicidad en las consultas.
Además, la consulta te presenta una sola fila y no 3, 4 o 15,000 filas... lo cual es poco práctico. Si por algún motivo quieres presentar n
filas con los nombres de carreras repetidas, lo puedes hacer mediante un bucle que imprima el dato de la columna carrera
las veces indicadas en la columna total
, estoy hablando de un código mejorado y con mejor rendimiento, ya que no es lo mismo sacar del servidor una sola fila, que sacar 3, 4 o n
filas.
Espero te sea de ayuda.
SQL Fiddle
MySQL 5.6 Schema Setup:
CREATE TABLE tesis
(`id_tesis` int,
`nombre_tesis` varchar(70),
`carrera` varchar(55))
;
INSERT INTO tesis
(`id_tesis`, `nombre_tesis`, `carrera`)
VALUES
(16, 'Análisis...', 'Lic. en Criminología'),
(17, 'Tesis en...', 'Licenciatura en Administración'),
(18, 'Litigación en...', 'Maestría en...'),
(19, 'Tesis en...', 'Licenciatura en Administración'),
(26, 'La intranet...', 'Ingeniería ITC'),
(28, 'Tesis en...', 'Licenciatura en Administración'),
(29, 'Litigación en...', 'Maestría en...'),
(30, 'Tesis en...', 'Licenciatura en Administrción')
;
CREATE TABLE tesis_relacional
(`id_tesis` int, `nombre_tesis` varchar(70), `id_carrera` int)
;
INSERT INTO tesis_relacional
(`id_tesis`, `nombre_tesis`, `id_carrera`)
VALUES
(16, 'Análisis...', 1),
(17, 'Tesis en...', 2),
(18, 'Litigación en...', 3),
(19, 'Tesis en...', 2),
(26, 'La intranet...', 4),
(28, 'Tesis en...', 2),
(29, 'Litigación en...', 1),
(30, 'Tesis en...', 2)
;
CREATE TABLE carreras
(`id_carrera` int, `nombre_carrera` varchar(70))
;
INSERT INTO carreras
(`id_carrera`, `nombre_carrera`)
VALUES
(1, 'Lic. en Criminología'),
(2, 'Licenciatura en Administración'),
(3, 'Maestría en...'),
(4, 'Ingeniería ITC')
;
Query 1:
SELECT carrera
FROM tesis
WHERE
carrera IN (
SELECT carrera
FROM tesis
GROUP BY carrera
HAVING COUNT(id_tesis) > 1
)
AND carrera='Licenciatura en Administración'
Results:
| carrera |
|--------------------------------|
| Licenciatura en Administración |
| Licenciatura en Administración |
| Licenciatura en Administración |
Query 2:
-- SQL usando tesis_relacional
SELECT c.nombre_carrera, count(*) as total
FROM carreras c
INNER JOIN
tesis_relacional t ON c.id_carrera=t.id_carrera
WHERE c.id_carrera=2
GROUP BY c.id_carrera
HAVING COUNT(t.id_tesis) > 1
Results:
| nombre_carrera | total |
|--------------------------------|-------|
| Licenciatura en Administración | 4 |