Avatar billede michael_stim Ekspert
04. september 2014 - 15:52 Der er 6 kommentarer og
1 løsning

COUNT på flere feldter med GROUP BY.

Har en tabel hvor jeg skal lave en count på flere feldter med forskellige conditions og en group by time. Hvordan løser man lige det? En subquery kan jo kun returnere én værdi.

Eksempel:

SELECT HOUR(datofeldt) AS Time, COUNT(*) AS Total,
(SELECT COUNT(*) FROM tabel1
WHERE felt2 = etEllerAndet GROUP BY HOUR(datofeldt)) AS value1,
(SELECT COUNT(*) FROM tabel1
WHERE felt3 = etEllerAndet GROUP BY HOUR(datofeldt)) AS value2
...
WHERE Feldt = EtEllerAndet
GROUP BY HOUR(datofeldt)


Håber i forstår, ellers er det bare at skrige op.
Avatar billede arne_v Ekspert
04. september 2014 - 16:02 #1
Jeg vil gaette paa JOIN af subqueries.

Noget a la:

SELECT x.t,y.v,z.v
FROM tabel x
JOIN (SELECT t,COUNT(*)AS v FROM tabel WHERE ...) y ON x.t=y.t
JOIN (SELECT t,COUNT(*)AS v FROM tabel WHERE ...) z ON x.t=z.t
Avatar billede michael_stim Ekspert
04. september 2014 - 16:11 #2
Uha, den syntax kan jeg ikke lige gennemskue. Kan du hjælpe mig lidt på vej?

Min nuværende query:


SELECT
    HOUR(CreatedDT) AS Timme,
    COUNT(*) AS CreatedDT,
    (SELECT
            COUNT(*)
        FROM
            ProductAppToDo
        WHERE
            CompletedDT > curdate()
                AND CompletedDT <> 0) AS CompletedDT,
    (SELECT
            COUNT(*)
        FROM
            ProductAppToDo
        WHERE
            PausedDT > curdate() AND PausedDT <> 0) AS PausedDT,
    (SELECT
            COUNT(*)
        FROM
            ProductAppToDo
        WHERE
            AssignedDT > curdate()
                AND AssignedDT <> 0) AS AssignedDT
FROM
    ProductAppToDo
WHERE
    CreatedDT > CURDATE()
GROUP BY HOUR(CreatedDT)
Avatar billede arne_v Ekspert
04. september 2014 - 16:27 #3
SELECT x.Timme,x.CreatedDT, t.CompletedDT
FROM (SELECT HOUR(CreatedDT) AS Timme,COUNT(*) AS CreatedDT FROM ProductAppToDo WHERE CreatedDT > CURDATE() GROUP BY HOUR(CreatedDT)) x
JOIN (SELECT HOUR(CreatedDT) AS Timme, COUNT(*) AS CompletedDT FROM  ProductAppToDo WHERE CompletedDT > curdate() AND CompletedDT) y ON x.Timme=y.Timme

eller saadan noget
Avatar billede michael_stim Ekspert
04. september 2014 - 17:03 #4
Tror jeg løste det med denna:


SELECT
    DAYOFWEEK(CreatedDT) AS Dag,
    WEEK(CreatedDT) AS Vecka,
    HOUR(CreatedDT) AS Timme,
    COUNT(*) AS 'Antal ansökningar',
    COALESCE(SUM(CompletedDT <> 0), 0) AS Sökta,
    COALESCE(SUM(PausedDT <> 0), 0) AS Pausad,
    COALESCE(SUM(AssignedDT <> 0), 0) AS Utdelad,
    COALESCE(SUM(AssignedDT = 0), 0) AS Kvarvarande
FROM
    ProductAppToDo
WHERE
    CreatedDT > CURDATE()
GROUP BY HOUR(CreatedDT)


Skal bare lige checke data.

Læg et svar Arne_v.
Avatar billede michael_stim Ekspert
10. september 2014 - 12:55 #5
Svar Arne_v?
Avatar billede arne_v Ekspert
11. september 2014 - 04:44 #6
hvis du syntes
Avatar billede michael_stim Ekspert
11. september 2014 - 10:18 #7
Tak for din tid Arne.
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