Avatar billede otis Nybegynder
16. oktober 2012 - 11:30 Der er 1 kommentar og
1 løsning

Brug af COUNT, DISTINCT og UNIQUE i samme streng.

Hej!
Jeg har en database med en masse logons, hvor jeg registrerer brugeres Antivirus software og deres OS.
Jeg har med min kode fået grupperet Antivirus, så der ikke tælles for samme bruger to gange:

SELECT Antivirus, COUNT( DISTINCT Username ) AS antal FROM log GROUP BY Antivirus ORDER BY antal DESC

Men nu er det sådan at jeg gerne vil have deres OS med ud også, og det skal så også være unikt fordelt på Username.

Mit output ønskes således:

Antivirus | Antal | WIN_XP | WIN_7 | WIN_8
Program  |  24  |  4    |  10  |  10
Program 2 |  28  |  10    |  9  |  11

Selvom der f.eks er 4200 entries i hele loggen, så grupperer den og kalder kun det brugbare.

Håber jeg har formuleret mig nogenlunde korrekt, og jeg kan få lidt hjælp :-)
Avatar billede otis Nybegynder
17. oktober 2012 - 09:13 #1
Er kommet lidt videre:
SELECT Antivirus,
COUNT( DISTINCT Username ) AS antal,
SUM(IF(OSType = "WIN_XP", 1,0)) AS WindowsXP,
SUM(IF(OSType = "WIN_7", 1,0)) AS Windows7,
SUM(IF(OSType = "WIN_8", 1,0)) AS Windows8
FROM log
GROUP BY Antivirus
ORDER BY antal DESC

Output:
Antivirus      | antal|WindowsXP |Windows7|Windows8
AntivirusNavn  | 2762 | 2707    | 30613  | 0

Men jeg får stadigvæk det totale antal OS. Dette skal grupperes på Username, så man kun registeres en gang.
Avatar billede otis Nybegynder
24. oktober 2012 - 12:16 #2
Lukker og slukker, desværre :-)
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

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