2012-07-25 22 views
7

Mam stół "dobrze". Zawiera kolumnę app_rate_unit (type: nvarchar). Moim celem jest zliczanie każdej odrębnej wartości w tabeli i niech DBMS (MS Server 2005) da mi najbardziej występującą.SELECT MAX of COUNT

To jest mój kod:

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 

poblem z nim jest jednak, że moi DBMS rzeczywiście dostarcza najniższą liczyć na mnie.

SideQuestion: Jak mogę filtrować klucz obcy (w tabeli) i NIE NULL (w app_rate_unit) podczas liczenia?

Odpowiedz

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

co się stanie, jeśli istnieje więcej niż jeden wiersz o takiej samej maksymalnej liczbie, a następnie w jaki sposób powinniśmy napisać zapytanie, które wybierze wszystkie górne wiersze z maksymalną liczbą zliczeń, zamiast wybierać tylko górną 1? –

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

działa, ale nie chcę się liczyć wartość, ale nazwa wartości, to wydarzyło się najbardziej. Czy masz jakieś dane dotyczące SideQuestion, które przedstawiłem? – Rufus

+0

Myślę, że chce uzyskać app_rate_unit z najwyższą liczbą, a nie sam rachunek. Spójrz na moje oświadczenie. – stb

1

Spróbuj

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 

Powyższy skrypt daje liczbę i przedmiot. Możesz zmienić liczbę, jeśli nie jesteś pewien, że tylko jedna pozycja będzie miała maksymalną liczbę wystąpień.

+0

działa jak urok. jak to się dzieje, że nie liczy wartości NULL, ale oświadczenie Stb ma? – Rufus

+0

może być, ponieważ NULL nie jest większa niż jakakolwiek inna wartość. Ale dodałem warunek sprawdzania NULL jawnie. Sprawdź edytowany skrypt. – Narendra

+0

ah tak, ... tak. zobaczyłem, że trochę późno, przepraszam – Rufus

0

W PostgreSQL możemy napisać zapytanie, które przy użyciu max liczone jako

select max(count) from (

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

np

select max(count) from (

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