2011-09-26 21 views
5

En primer lugar, si es relevante, estoy usando MySQL, aunque supongo que una solución funcionaría en todos los productos de DB. Mi problema es así:Obtener el número de valores que solo aparece una vez en una columna

Tengo una tabla simple con una sola columna. No hay restricciones en la columna. Dentro de esta columna hay algunos datos simples, p.

a 
a 
b 
c 
d 
d 

Necesito obtener el número/conteo de valores que solo aparece una vez. Del ejemplo anterior, sería 2 (ya que solo b y c aparecen una vez en la columna).

Espero que esté claro que no quiero valores DISTINCT, sino valores ÚNICOS. De hecho, he hecho esto antes, creando una tabla adicional con una restricción ÚNICA en la columna y simplemente INSERTANDO a la nueva tabla desde la anterior, manejando los duplicados en consecuencia.

Tenía la esperanza de encontrar una solución que no requiriera la tabla temporal, y de alguna manera solo se podía lograr con un elegante SELECT.

+1

L OL en las tres respuestas similares publicadas simultáneamente. – ray

+0

Ah, pero quién es el mejor;) –

+0

En este punto y después de volver a leer la pregunta, realmente creo que Randy o Romain toman el premio, pero tuviste un formato más lindo que yo @Hugh Jones: D – ray

Respuesta

14

Asumiendo que su tabla se denomina T y su campo se llama F:

SELECT COUNT(F) 
FROM (
    SELECT F 
    FROM T 
    GROUP BY F 
    HAVING COUNT(*) = 1 
) AS ONLY_ONCE 
+1

Por mi dinero, esta es la mejor respuesta. –

+0

Muchas gracias. Funciona perfectamente. – BoomShaka

3
select field1, count(field1) from my_table group by field1 having count(field1) = 1 

select count(*) from (select field1, count(field1) from my_table group by field1 having count(field1) = 1) 

primero se devolverán los que son únicos y el segundo devolverá el número de elementos únicos.

3
select count(*) from 
(
    select 
    col1, count(*) 
    from 
    Table 
    group by 
    Col1 
    Having 
    Count(Col1) = 1 
) 
+0

Creo que mi nueva versión es la más independiente de la plataforma –

3

Podría ser tan simple como esto:

Select MyColumn From MyTable Group By MyColumn Where Count(MyColumn) = 1 
+0

Le da la lista de valores "representados de manera única", pero no el recuento de dichos valores (usted) d tiene que ver la cantidad de registros devueltos). Buen espíritu en general, pero carece del conteo de nivel superior requerido para responder la pregunta :) – Romain

+1

@Romain ¡Oh, seguro ... tecnicismos! Solo uno fuera del grupo sin votaciones. Es como el gimnasio de la escuela media otra vez. – ray

+1

Veo lo que quiere decir ... Por lo tanto, estaba a punto de destacar que su respuesta fue realmente buena ... Y hubiera votado si hubiera respondido completamente la pregunta ... – Romain

3

solo nido un poco ...

select count(cnt) from 
(select count(mycol) cnt from mytab group by mycol) 
where cnt = 1 
+0

El póster, creo, no hizo bien su pregunta. Esta respuesta aborda una interpretación diferente de la que todos los demás hicimos. –

+1

@Hugh - No estoy de acuerdo. Me parece muy claro "Necesito obtener el número/recuento de valores que solo aparecen una vez. A partir del ejemplo anterior que sería 2" su respuesta es simplemente incorrecta. Esto devuelve lo mismo que Romain (aunque falta el alias de la tabla derivada) –

+1

Sí, releí la pregunta y no es ambigua, sin embargo, 'No quiero que los valores DISTINCT que quiero ÚNICOS' me hayan enviado de la manera incorrecta. –

Cuestiones relacionadas