2012-07-25 40 views
7

Tengo una tabla "bien". Contiene una columna app_rate_unit (type: nvarchar). Mi objetivo es contar cada valor distinto en la tabla y dejar que el DBMS (MS Server 2005) me proporcione el que más se presenta.SELECCIONAR MAX de COUNT

Este es mi código:

SELECT MAX(app_rate_unit) AS MAX_APP 
    FROM (SELECT app_rate_unit, COUNT(*) AS co 
      FROM dbo.well AS w 
     GROUP BY app_rate_unit 
     ) AS derivedtbl_1 

El poblem con él es sin embargo, que mis DBMS ofrece de hecho el recuento más bajo para mí.

SideQuestion: ¿Cómo se filtra una clave foránea (en la tabla) y NOT NULL (en app_rate_unit) al contar?

Respuesta

15
select top 1 app_rate_unit, count(*) from dbo.well 
group by app_rate_unit 
order by count(*) desc 
+3

¿Qué sucede si hay más de una fila con el mismo número máximo de conteos, entonces, cómo deberíamos escribir una consulta que seleccionará todas las filas superiores con un máximo de conteos en lugar de solo seleccionar la parte superior? –

0
select top 1 count(*) as co from dbo.well as w group by app_rate_unit 
order by count(*) desc 
+0

funciona, pero no desea que el recuento de valor, pero el nombre del valor, que ocurrió más. ¿Tiene alguna entrada con respecto a la SideQuestion que hice? – Rufus

+0

Creo que quiere obtener la app_rate_unit con el recuento más alto, no el conteo en sí. Eche un vistazo a mi declaración. – stb

1

probar este

SELECT 
     COUNT(app_rate_unit)AS MAX_APP , 
     app_rate_unit 
    FROM 
     dbo.well 
    WHERE 
      app_rate_unit IS NOT NULL 
    GROUP BY 
     app_rate_unit 
    ORDER BY 
      MAX_APP DESC 

El script anterior le dará el conteo y el artículo. Puede cambiar el recuento si no está seguro de que solo un elemento tendrá el número máximo de ocurrencias.

+0

funciona como un encanto. ¿Cómo es que no cuenta los valores NULL sino la declaración de stb? – Rufus

+0

puede ser porque NULL no es mayor que cualquier otro valor. Pero he agregado la condición de comprobación NULL explícitamente. Verifique el guión editado. – Narendra

+0

ah sí, ... cierto. vi que un poco tarde, lo siento – Rufus

0

En PostgreSQL podemos escribir consulta que utiliza máximo de recuento como

select max(count) from (

select count(id) from Table _name group by created_by,status_id having status_id = 6) as Alias 

por ejemplo

select max(count) from (

select count(id) from orders group by created_by,status_id having status_id = 6) as foo 
Cuestiones relacionadas