2012-07-25 9 views
7

Ho una tabella "bene". Contiene una colonna app_rate_unit (tipo: nvarchar). Il mio obiettivo è contare ogni valore distinto nella tabella e lasciare che il DBMS (MS Server 2005) mi dia il più significativo.SELEZIONA MAX DI CONTEGGIO

Questo è il mio codice:

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 

La poblem con esso è però, che i miei DBMS fornisce di fatto il conteggio più basso per me.

SideQuestion: come filtro per una chiave esterna (nella tabella) e NOT NULL (in unità_unità_app) quando si conta?

risposta

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

e se ci sono più di una riga con lo stesso numero massimo di conteggi, allora come dovremmo scrivere una query che selezionerà tutte le righe in alto con il numero massimo di conteggi invece di selezionare solo il primo 1? –

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

Works, ma non voglio che il count-valore, ma il nome del valore, quello si è verificato di più. Hai qualche input riguardo al SideQuestion che ho fatto posare? – Rufus

+0

Penso che voglia ottenere l'app_rate_unit con il conteggio più alto, non il conteggio stesso. Dai un'occhiata alla mia dichiarazione. – stb

1

Prova questa

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 

Lo script di cui sopra vi darà il conteggio e la voce. È possibile modificare il conteggio se non si è sicuri che solo un articolo avrà il numero massimo di occorrenze.

+0

funziona come un fascino. come mai non conta i valori NULL ma l'affermazione di stb lo fa? – Rufus

+0

potrebbe essere perché NULL non è maggiore di qualsiasi altro valore. Ma ho aggiunto esplicitamente la condizione di controllo NULL. Controlla lo script modificato. – Narendra

+0

ah sì, ... giusto. visto che un po 'in ritardo, mi dispiace – Rufus

0

In PostgreSQL possiamo scrivere di query che utilizza max di conteggio come

select max(count) from (

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

esempio

select max(count) from (

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