webForumDet fria alternativet
Logga in / Bli medlem

Gruppering

Databaser & SQL

6 svar · 278 visningar · startad av Kristianstad

Medlem sedan dec. 2002841 inlägg
Trådstart#1

Kolumnen IP innehåller flera IP-nummer. Vissa presenteras bara en gång, vissa presenteras flera, t.ex.

IP:              Datum:
111.111.111.111  2005-01-03
111.111.111.111  2005-01-03
222.222.222.222  2005-01-03
111.111.111.111  2005-01-03
222.222.222.222  2005-01-03
333.333.333.333  2005-01-03
111.111.111.111  2005-01-03
111.111.111.111  2005-01-04

Nu vill jag för det första endast ha från 2005-01-03, sedan vill jag att det ska presenteras så här:

Besök    Antal
1:       1
2:       2
3:       0

Jag vill alltså ha en sammanställning av hur många gånger IP-numret bara dyker upp en gång, två gånger, osv. Går det att fixa direkt i SQL?

Jag använder Access.

Medlem sedan juni 200032 967 inlägg
#2
SELECT ipnummer, count(*) as antal
GROUP BY ipnummer
ORDER BY 2 DESC

mvh

Medlem sedan dec. 2002841 inlägg
#3

Jag vill ha det ytterligare, att det grupperar count(*) as antal

Jag kan beskriva det lättare:

Kalle
Kalle
Göran
Göran
Ellen
Ellen
Ellen

Kalle har visats 2 ggr. Göran 2 ggr. och Ellen 3 ggr.

Det har hänt två ggr att det visats två ggr. :)

1 ggr = 0 gånger
2 ggr = 2 gånger
3 ggr = 1 gång

Går det ens?

Medlem sedan dec. 200012 464 inlägg
#4

Du behöver en hjälptabell för att få ut rader där det finns 0 förekomster. Det är den som heter nrTable i nedanstående och den behöver en kolumn (nr) av typen integer. Lagra värden från 1 till så många förekomster du vill kunna visa.

   select nr,nvl(occ,0)
     from nrTable left outer join
   (select c,count(*) as occ
      from (select count(*) as c
              from iptable
             group by ipnummer)dt
    group by c)dt
    on nr = dt.c
   where nr between 1 and 3

Det är faktiskt otestat.

Medlem sedan dec. 2002841 inlägg
#5

Hejsan Lars!

Jag fic följande felmeddelande:
Join expression not supported.

Medlem sedan dec. 200012 464 inlägg
#6

Om du bara testar denna då

select c,count(*) as occ
      from (select count(*) as c
              from iptable
             group by ipnummer) as dt
    group by c

Då borde du få ut allt utom de förekomster som är 0. I värsta fall kan man ju lägga till dessa i skriptet.

Medlem sedan dec. 2002841 inlägg
#7

Det funkar utmärkt så! Det gör inget om det inte visar de som är 0.

Tack Lars!

253 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)