En primer lugaf cambiaria el operador != por el correcto que es <>. Luego crearia sendas variables @Count1 y @Count2 y les asigno los count de cada consulta y luego muestro su suma.
Contar los registros que tienen dos campos con valor repetido y sumarlos
Hola,
Tengo una tabla donde están registrados muchas personas y quiero hacer un listado donde me indique solo el apellido y el número de veces que se repite usando solo las columnas del primer apellido y del segundo apellido
Con una sola columna, la del primer apellido (Apellido1), si me sale:
SELECT COUNT(Apellido1), Apellido1
FROM fichas
where Apellido1 is not null AND Apellido1 !=''
GROUP BY Apellido1
ORDER BY COUNT( Apellido1 ) DESC
Si hago lo mismo pero usando la columna del segundo apellido (Apellido2), tambien funciona.
Pero no consigo que MsSQL me dé un resultado correcto sumando los apellidos de las dos columnas (Apellido1 y Apellido2)
¿Cómo podria ser la consulta MySQL correcta?
Gracias
Respuestas
Tienes usar la clausula having de SQL y hacer una concatenación de los nombres y apellidos, o de los dos apellidos en tu caso. Eso en MySQL lo consigues con la función concat(), pero podría cambiar en otros motores de bases de datos.
Creo que lo que buscas sería más o menos un SQL como el siguiente.
select
concat(nombre, ' ', apellidos),
count(*) as contador
from
usuario
group by
nombre,
apellidos
having
count(*) > 1
Si haces la suma de cada parte del apellido y despues una union, y lo sumas?, mas o menos asi:
SELECT SUM(count) SUMA ,apellido
FROM (
SELECT COUNT(Apellido1) as count, Apellido1 as apellido
FROM fichas
where Apellido1 is not null AND Apellido1 !=''
GROUP BY Apellido1
union
SELECT COUNT(Apellido2) as count, Apellido2 as apellido
FROM fichas
where Apellido2 is not null AND Apellido2 !=''
GROUP BY Apellido2
)
GROUP BY apellido
ORDER BY SUMA DESC
Hola Francisco
Espero que esto te sirva al menos para orientarte
SELECT
columna1, columna2
count(*) as mi_contador
FROM
mitabla
WHERE
loquesea = algo
GROUP BY
columna1, columna2
Saludos
Hola. no me sirve la respuesta de David pues el resultado muestra las dos columnas y toma las diferencias.
He adactado el codigo con mis datos así:
SELECT Apellido1, Apellido2, count(*) as mi_contador
FROM fichas
WHERE Apellido1 is not null AND Apellido1 !='' AND Apellido2 is not null AND Apellido2 !=''
GROUP BY Apellido1, Apellido2
ORDER BY COUNT( Apellido1 ) DESC
Pero no hace lo que necesito. Ver en una sola columna los apellidos y en una segunda el número de veces que esos se repiten sumando la veces que aperecen en las dos columnas.
El resultado que deseo obtener son 2 columnas, 1 con el apellido y otro con el nº de veces que se repite contando que los apellidos los tengo separados en 2 columnas de 1º apellido y 2º apellido. Como ejemplo podria decir que mi apellido Moreno como 1º apellido en mi familia se repite 13 veces, y como 2º apellido se repite otras 13,luego quiero que me diga en la 1º columna 'Moreno' y en la 2º '26', etc..