Avatar billede michaeldiaz Nybegynder
03. august 2005 - 12:47 Der er 9 kommentarer og
1 løsning

Hjælp til et group by statement

Hej Eksperter

Jeg laver en projekt-database hvor jeg gerne vil udtrække en liste der viser en liste over projekter sorteret efter navnet på personen der har dem, samt hvor mange projekter han har ude, og hvor mange af disse der er åbne og lukkede.

Felterne i databasen er:

id - projectdesc - date - person - active

Hvor person er personen der har projektet og active enten er 1 eller 0, alt efter om projektet er åbnet eller lukket.

Listen jeg ønsker skal se således ud:

Person    Projects    Open  Closed
John Doe  5 projects    2    3

Jeg kan godt få listet personen og antallet af projekter ved:
SELECT person, COUNT(person) as projects
    FROM ".$table."
    GROUP BY projects
    ORDER BY person DESC

Men hvordan får jeg de to sidste kolonner ind? Det må være noget med et join..

Mvh
mdiaz
Avatar billede arne_v Ekspert
03. august 2005 - 12:52 #1
nej subquery

SELECT person,
    COUNT(person) as projects,
    (SELECT COUNT(*) FROM tabel t1 WHERE t1.person=t.person AND t1.active=1),
    (SELECT COUNT(*) FROM tabel t2 WHERE t2.person=t.person AND t2.active=0)
FROM tabel t
GROUP BY t.projects
ORDER BY t.person DESC
Avatar billede michaeldiaz Nybegynder
03. august 2005 - 12:58 #2
Tak, jeg kan se idéen, læg et svar.
Avatar billede arne_v Ekspert
03. august 2005 - 13:03 #3
svar
Avatar billede arne_v Ekspert
03. august 2005 - 13:04 #4
bremsssssssssssssssssssss

jeg tror du skal se bort fra mit svar !
Avatar billede arne_v Ekspert
03. august 2005 - 13:05 #5
Jeg er ikke sikker på at MySQL understøtter subquery i select listen

(SQLServer gør, men det nytter jo ikke)
Avatar billede michaeldiaz Nybegynder
03. august 2005 - 13:34 #6
4.1 gør, under der gør ikke. Og jeg har pt ikke en >4.1 tilgængelig :\
De kan omskrives med nogle joins, dog, har jeg læst - hvis du vil komme med et forslag til hvordan er du mere end velkommen.
Avatar billede barklund Nybegynder
03. august 2005 - 13:37 #7
Altså, hvis projekt-tabellen indeholder, om projektet er aktivt, og du skal have en liste over personer, antal projekter (som personen står for) og hvor mange åbne og lukkede heraf, så er det da bare:

SELECT
    person,
    COUNT(1) as projects,
    SUM(IF(active=1,1,0)) AS open,
    SUM(IF(active=0,1,0)) AS closed
FROM tabel
GROUP BY person
ORDER BY person DESC

Men nu skriver du i din beskrivelse, at det er en liste over projekter - og ovenstående er jo nærmere at betragte som en liste over projekt-ejere, for du kan jo ikke se de enkelte projekter.

--
Morten Barklund
Avatar billede barklund Nybegynder
03. august 2005 - 13:37 #8
Eller faktisk bare:

SELECT
    person,
    COUNT(1) as projects,
    SUM(active) AS open,
    COUNT(1)-SUM(active) AS closed
FROM tabel
GROUP BY person
ORDER BY person DESC

:)

--
Morten Barklund
Avatar billede arne_v Ekspert
03. august 2005 - 13:41 #9
det ser vist fornuftigt ud

jeg overfører de point til barklund
Avatar billede arne_v Ekspert
03. august 2005 - 13:42 #10
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