webForumDet fria alternativet

Hur räkna ut flest förekomster i en tabell?

Databaser & SQL

6 svar · 1 523 visningar · startad av xtreme

Medlem sedan juli 20002 056 inlägg
Frågan#1

Om jag har en kolumn i en tabell som ex ser ut så här?

F1
F1
F1
F3
F5
F3

Hur tar jag reda på vilken av F som förekommer flest gånger, som i detta fallet är F1?

Medlem sedan jan. 2005953 inlägg
#2
SELECT COUNT(*) AS antal FROM tabellnamn GROUP BY kolumnnamn

Där kolumnnamn är kolumnen innehållandes F1, F3 eller F5

Medlem sedan juli 20002 056 inlägg
#3

metalboy skrev:

SELECT COUNT(*) AS antal FROM tabellnamn GROUP BY kolumnnamn

Där kolumnnamn är kolumnen innehållandes F1, F3 eller F5

Tackar men den ger mig en lista ex:

3
3
2
1

Dvs någon F förekommer 3 gånger, någon 2 gånger etc men vet inte vilken F. Vill (bara) få fram ex "F1" i "svaret" dvs den som förekommer flest gånger, inte bara en siffra.

Medlem sedan dec. 200012 464 inlägg
#4
select c,
         count(*) as occurrences
  from t lnamn 
 group by c
 order by occurrences desc
 fetch first row only

Beroende på DBMS så kan du behöva byta ut den sista raden. De flesta har något stöd för att begränsa antalet returnerade rader. Få följer dock standard.

Medlem sedan juli 20002 056 inlägg
#5

LarsG skrev:

select c,
         count(*) as occurrences
  from t lnamn 
 group by c
 order by occurrences desc
 fetch first row only

Beroende på DBMS så kan du behöva byta ut den sista raden. De flesta har något stöd för att begränsa antalet returnerade rader. Få följer dock standard.

Använder MS SQL där det var "select top 1" i stället för " fetch first row only". Problemet är att jag får fram:

F1        3

Hur får jag så att inte count, dvs siffran 5 visas utan bara F1.

Medlem sedan jan. 2005327 inlägg
#6

xtreme skrev:

Använder MS SQL där det var "select top 1" i stället för " fetch first row only". Problemet är att jag får fram:

F1        3

Hur får jag så att inte count, dvs siffran 5 visas utan bara F1.

Det är väl bara att strunta i det i select satsen, eller?

typ så här:


select top 1 c
         
  from t lnamn 
 group by c
 order by count(*) desc

/pebi

Medlem sedan dec. 200012 464 inlägg
#7

Om mssql har stöd för att använda aggregatfunktioner i order by så kan du skriva

select top 1 c
  from t  
 group by c
 order by count(*) desc

annars så går det lika bra med

select c 
  from
     (select top 1 c,
             count(*) as occurrences
        from t  
       group by c
       order by occurrences desc) dt
251 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)