Avatar billede bongo20 Nybegynder
08. november 2005 - 18:47 Der er 21 kommentarer og
1 løsning

count("stjerne") og group by

Hej

Jeg forsøger at samle en lang række sammentællinger i den samme query.
Noget i retning af:
(Select Count(*) from test where bla. bla.), (Select Count(*) from test where bla. bla.) .. osv ...

Det virker fint, men jeg vil godt kunne gøre noget lignende:
(Select Count(*) from test Group By date), (Select Count(*) from test Group By anotherDate) .. osv..
Det virker bare ikke, idet det giver flere resultater i hver inner select.

Nogen der kan se hvad jeg vil og hvordan jeg kan gøre det?

:o)
Avatar billede bromer Nybegynder
08. november 2005 - 18:50 #1
Jeg tror du er ude i noget skidt, hvis jeg skal være helt ærlig. Hvordan ser dine tabelopbygning ud og hvordan er det præcist du vil have output?
Avatar billede nielle Nybegynder
08. november 2005 - 18:50 #2
SELECT ditDateFelt, Count(*) FROM test GROUP BY ditDateFelt
Avatar billede nielle Nybegynder
08. november 2005 - 18:54 #3
Når du skriver "date" og "anotherDate" tror jeg at der er et eller andet du har misforstået. Man gruppere nemlig ikke på en værdi, men derimod på et felt i tabellen. Dette felt kan have mange forskellige værdier, og ideen med GROUP BY er netop at samle alle posterne med samme værdi til en post i outputtet fra SELECT'en. I den viste SQL, så tæller man netop op hvor mange poster der er med hver af de mulige værdier.
Avatar billede bongo20 Nybegynder
08. november 2005 - 18:58 #4
Ja ok nielle,.. så ny er jeg heller ikke.
Jeg har mange forskellige felter jeg skal gruppere ud fra.

Jeg skal bruge en lang række tal som alle er sammentællinger af antal rækker i tabellen grupperet ud fra forskellige felter og med forskellige where clauses..

andre forslag?
Avatar billede bromer Nybegynder
08. november 2005 - 19:01 #5
Man kunne vel argumentere for at du ikke opnår voldsomt meget performence ved at lave en stor select ud af en masse subselects. Hvorfor ikke bare lave dine individuelle selects fra din klient hvad end det så er :)
Avatar billede nielle Nybegynder
08. november 2005 - 19:02 #6
Undskylder, men jeg kan jo kun vurdere ud fra hvad du har skrevet. :^|

Du nævner noget om en INNER JOIN? Den kan jeg ikke se nogen steder?
Avatar billede bromer Nybegynder
08. november 2005 - 19:04 #7
han nænvte faktisk kun "inner select".... jeg synes inner select er lige så tæt på "subselect" som "inner join".. I er lige langt fra begge to :)
Avatar billede nielle Nybegynder
08. november 2005 - 19:08 #8
Du har ret ... læste lige forkert der.
Avatar billede bongo20 Nybegynder
08. november 2005 - 19:11 #9
det kan godt ende med at blive løsningen bromer, men jeg havde planer om at samle det hele i en SP til sidst, så jeg synes bare det ville være fint at samle hele skidtet i en query først
Avatar billede nielle Nybegynder
08. november 2005 - 19:13 #10
Hvad ønsker du egentligt at der skal komme ud af:

(Select Count(*) from test Group By date), (Select Count(*) from test Group By anotherDate)

- når nu den første subselect kan give flere rækker og den anden subselect også kan give flere rækker?
Avatar billede bongo20 Nybegynder
08. november 2005 - 19:18 #11
Ja, det er også problemet. Jeg vil godt have talt alle rækker hvor datoen f.eks. er 08-11-2005.

Den her måde giver en masse sammentællinger. Jeg skal bruge et tal der samler hvor mange rækker med unikke datoer der er.
Avatar billede nielle Nybegynder
08. november 2005 - 19:25 #12
Jamen, løsningen på dette er jo netop den SQL jeg angiver i 08/11-2005 18:50:34?
Avatar billede bongo20 Nybegynder
08. november 2005 - 19:30 #13
Ja hvis man vil gøre det enkeltvis,.den slags virker ikke i en ( og nu må jeg hellere bruger det rigtige ord :o) ) subselect
Avatar billede nielle Nybegynder
08. november 2005 - 19:35 #14
Jeg er ikke klar over hvad du mener med at gøre det "enkeltvis"?

Men jeg kan da fortælle at:

SELECT ditDateFelt, Count(*) FROM test GROUP BY ditDateFelt

- giver dig en optælling af hvor mange rækker der er af hhv. datoVærdi1, datoVærdi2, datoVærdi3 og datoVærdi4 osv. osv. ... for samtlige de mulige værdier du har i din tabel. Count(*) giver ikke - i dette tilfælde - summen af samtlige rækker i alt.
Avatar billede bongo20 Nybegynder
08. november 2005 - 19:47 #15
lad mig sige det på en anden måde,.. jeg vil godt vide hvor mange rækker, med forskellig værdi, i et bestemt felt jeg har
Avatar billede nielle Nybegynder
08. november 2005 - 19:50 #16
Kan du ikke give et lille eksempel på noget data, og hvad det er du ønsker at få ud når data ser sådan ud?
Avatar billede bongo20 Nybegynder
08. november 2005 - 21:18 #17
en tabel med 10 rækker. det ene felt hedder Dato. Der er 8 forskellige datoer hvilket vil sige at der så er nogle datoer der går igen. Jeg vil godt have tallet 8 ud.
Avatar billede nielle Nybegynder
08. november 2005 - 21:51 #18
Den angivne SQL giver dig dine 8 tal.

Eksempel:

Tabel - Kaeledyr

id Dyr Navn

1 Kat Louise
2 Hund Whiskey
3 Kat Misser
4 Kat Desheme
5 Guldfisk -
6 Kat Mus
7 Skildpadde Spinat0
8 Kat Pjuske
9 Kat Katinka
10 Hund Katla

Hvis dette er dine data så vil denne SQL:

SELECT Dyr, count(*) FROM Kaeledyr GROUP BY Dyr

- give dig følgende resultat:

Kat 6
Hund 2
Guldfisk 1
Skildpadde 1

- altså 4 datasæt fordi at der er 4 slags dyr i tabellen. Endvidere vil du kunne aflæse at der er 6 katte.
Avatar billede bongo20 Nybegynder
08. november 2005 - 22:06 #19
det tal jeg skal bruge fra det eksempel er tallet 4. Fordi der er 4 forskellige typer dyr
Avatar billede nielle Nybegynder
08. november 2005 - 22:16 #20
SELECT COUNT(DISTINCT Dyr) FROM Kaeledyr
Avatar billede bongo20 Nybegynder
08. november 2005 - 22:23 #21
lige nøjagtig,..tak for hjælpen. Smider du et svar nielle
Avatar billede nielle Nybegynder
08. november 2005 - 22:29 #22
Svar :^)
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