Avatar billede molte Nybegynder
20. juli 2010 - 10:27 Der er 4 kommentarer

SQL: Kan GROUP BY returnere en standardværdi hvor der mangler noget i databasen?

Jeg har en tabel med ordrer (`orders`) indeholdende kolonnerne `id`, `purchased_at` (datetime) og `total_price`, og vil gerne vide det samlede salg per dag.

SELECT DATE(purchased_at) AS purchased_on, SUM(total_price) AS price FROM orders WHERE DATE(purchased_at) IN ('2010-07-17','2010-07-18', '2010-07-19') GROUP BY purchased_on

Med denne SQL-forespørgsel opnår jeg resultatet bortset fra at de dage hvor der ingen ordrer er kommet får jeg ikke noget resultat. Jeg vil gerne have det således at disse dage returner nul som `price`.

Jeg har set på et lignende spørgsmål (http://www.eksperten.dk/spm/874199), men har ikke haft held med at implementere løsningen, så det virker.

Jeg har testet i SQLite, men løsningen skulle helst også fungere i både MySQL og PostgreSQL.
Avatar billede arne_v Ekspert
22. juli 2010 - 04:13 #1
Det nemmeste og mest portable er at lave en tabel med alle datoer og så lave en RIGHT JOIN med den.
Avatar billede molte Nybegynder
22. juli 2010 - 15:47 #2
Ja, men så vil man jo skulle have en hulens masse datoer i denne tabel for at man kunne slå et hvilken som helst sæt datoer op. Desuden virker det lidt forkert at have en tabel bare med datoer...

Det nemmeste ville i mine øjne være at tilføje de manglende datoer via det programmeringssprog man arbejdede i, men formålet med spørgsmålet var at jeg var interesseret i hvorvidt det er muligt udelukkende ved brug af ren SQL.
Avatar billede arne_v Ekspert
22. juli 2010 - 15:56 #3
Hvis en dato fylder 8 bytes, saa fylder 100 aar ialt 300 KB d.v.s. ingenting.
Avatar billede molte Nybegynder
24. juli 2010 - 19:04 #4
Korrekt. Dog var jeg nærmere ude efter hvorvidt man kan gøre det uden den slags "fiksfakserier", også selv om det måske ville være det nemmeste/smarteste. Undskyld, hvis jeg har formuleret mig for upræcist.
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