Avatar billede jgivoni Nybegynder
02. september 2002 - 22:01 Der er 13 kommentarer og
1 løsning

COUNT og DISTINCT

SELECT COUNT(DISTINCT sessionid), page FROM counter GROUP BY page;

skal vise en liste over besøgte sider samt en optælling af hvor mange forskellige 'sessions' der har besøgt den.

Kombinationen COUNT(DISTINCT... virker bare ikke i pågældende MySQL-version.

Nogen kloge hoveder med en løsning i ren SQL, der virker? (Jeg tror den er svær...)
Avatar billede disky Nybegynder
02. september 2002 - 23:09 #1
jeg har lige fyret en:
select distinct(count(pn_sessid)), pn_ipaddr from nuke_session_info group by pn_ipaddr;

af på min database, det gav en liste over antal session hver enkelt IP adresse havde lavet.

Så det skulle virke. hvad er fejlen hos dig ?
Avatar billede disky Nybegynder
02. september 2002 - 23:13 #2
hehe jeg opdage først nu vi havde byttet rundt på distinct og count.

men
select count(distinct(pn_sessid)), pn_ipaddr from nuke_session_info group by pn_ipaddr;

gir samme resultat.
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:12 #3
Jeg får:

You have an error in your SQL syntax near 'DISTINCT sessionid

Hvilken version MySQL har du?
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:12 #4
Hov, vent lige... jeg glemte din parentes... prøver igen :-)
Avatar billede disky Nybegynder
03. september 2002 - 15:16 #5
Ja det kan ske for selv den bedste, jeg glemte det også første gang :) *lol*
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:25 #6
Men jeg får samme fejl hver gang alligevel.

Den anden version, med DISTINCT først giver imidlertid ikke fejl, men jeg er i tvivl om hvorvidt den gør det rigtige!

Jeg kan nemlig ikke tilføje COUNT(...) AS views og så sortere efter hyppighed.
Avatar billede disky Nybegynder
03. september 2002 - 15:37 #7
Okay lad os lige være sikker på vi snakker samme sprog :-)

Hvordan er data gemt i din DB og hvad ønsker du at hente fra basen ?
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:41 #8
Nu kan jeg godt få kaldet til at køre, men det gør det samme som jeg havde problemer med fra starten, nemlig at tælle en side flere gange indenfor samme session.

For hver session må en side højst tælle én gang, så jeg kan se hvor mange FORSKELLIGE brugere, der har set siden.

Jeg ved ikke lige hvordan mine data er gemt... :-)
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:48 #9
Tabellen indeholder (lidt forenklet):
sessionid, page
Dvs. hver gang en bruger besøger en side, gemmes en post med brugerens sessionid og sidenavnet.
Avatar billede jgivoni Nybegynder
03. september 2002 - 15:50 #10
Derfor vil jeg først have elimineret dubletter, så kombinationen sessionid og page kun finde én gang, derefter skal der grupperes efter page og tælles op for hver gruppe.
Lyder det indviklet?
Avatar billede disky Nybegynder
03. september 2002 - 16:01 #11
select count(distinct(sessionid)),page from tabel group by page

hvad med den ?

Jeg smutter hjem omlidt, jeg kan lige kigge på det igen.
Avatar billede jgivoni Nybegynder
03. september 2002 - 16:04 #12
Det er den, jeg gerne vil lave, men får fejlmelding af.
Avatar billede disky Nybegynder
03. september 2002 - 19:01 #13
mærkeligt,
jeg har lige rodet igen, og når frem til dette resultat:
select count(distinct(pn_sessid)) as antal, pn_ipaddr from nuke_session_info group by pn_ipaddr

Som viser antal sessions per ip adresse.


post venligst nøjagtigt din query.
Avatar billede jgivoni Nybegynder
03. september 2002 - 20:44 #14
Det ser måske lidt mere kompliceret ud, men det er kun fordi to tabeller, lige skal samles først.

Denne her virker, og tæller antal gange en side er vist.

SELECT COUNT(*) as antal, page
FROM session, session_page
WHERE session.sessionid=session_page.sessionid
GROUP BY page ORDER BY antal DESC


Denne her giver syntax fejl, men burde tælle hvor mange forskellige brugere, der har set en side:

SELECT COUNT(DISTINCT(session.sessionid)) as antal, page
FROM session, session_page
WHERE session.sessionid=session_page.sessionid
GROUP BY page ORDER BY antal DESC

Jeg vil tro det er MySQL-versionsforskelle, der gør udslaget???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester