Probleem bij geneste SELECTS in SQL bij zeer grote database

Status
Niet open voor verdere reacties.

rowanarien

Nieuwe gebruiker
Lid geworden
10 sep 2008
Berichten
4
Hallo,

Ik heb volgend probleem:

Ik heb volgende database:

(naam van deze tabel is <temp1>)

ID X Status
-----------------------------------
1 a 5
1 a 5
1 a 6
2 a 8
2 a 5
3 a 5
4 a 7
4 a 7
4 a 8

waarbij Status => 5=laag, 6=medium, 7=hoog, 8= zeer hoog

Ik zou nu graag de volgende tabel bekomen:

ID X aantal Laag Medium Hoog Zeer Hoog
----------------------------------------------------------------------------------------------------
1 a 3 2 1 0 0
2 a 2 1 0 0 0
3 a 1 1 0 0 0
4 a 3 0 0 2 1

Ik had de volgende code bedacht, en deze werkt ook, maar van zodra ik grote hoeveelheden (meer dan 10 000 lijnen) moet doorzoeken dan crasht hij (of moet keilang berekenen)

CREATE TABLE temp2 AS(
SELECT ID, X
FROM temp1
GROUP BY ID); // creates a table with the ID's and the X

CREATE TABLE uitkomst AS(
SELECT temp2.ID, temp2.X,
(SELECT COUNT(*) FROM temp1 WHERE temp1.ID = temp2.ID)
AS "aantal",
(SELECT COUNT(*) FROM temp1 WHERE temp1.ID = temp2.ID
AND temp1.status = 5) as "laag",
(SELECT COUNT(*) FROM temp1 WHERE temp1.ID = temp1.ID
AND temp1.status = 6) as "medium",
(SELECT COUNT(*) FROM temp1 WHERE temp1.ID = temp2.ID
AND temp1.status = 7) AS "hoog",
(SELECT COUNT(*) FROM temp1 WHERE temp1.ID = temp2.ID
AND temp1.status = 8) AS "zeer hoog"
FROM temp2
GROUP BY ID);

Werkt perfect voor tables met minder dan +- 10 000 lijnen maar eens je erboven gaat..problems

Ik heb al vanalles geprobeerd, maar krijg het niet opgelost?

Als er iemand een idee moest hebben?

Groetjes en alvast bedankt
Rowan
 
Mischien werkt dit beter..

Code:
SELECT ID,
  COUNT(*) AS aantal,
  SUM(CASE WHEN STATUS = 5 THEN 1 ELSE 0 END) AS "laag", 
  SUM(CASE WHEN STATUS = 6 THEN 1 ELSE 0 END) AS "medium", 
  SUM(CASE WHEN STATUS = 7 THEN 1 ELSE 0 END) AS "hoog", 
  SUM(CASE WHEN STATUS = 8 THEN 1 ELSE 0 END) AS "zeer hoog"
FROM temp1
GROUP BY ID
 
Sorry,

Maar dit doet niet hetzelfde,

Ik krijg dan een tabel terug, maar de laag, medium enz zijn niet samengeteld...

Of moet ik erna nog iets doen?

Mvg
Rowan
 
SELECT ID, X
FROM temp1
GROUP BY ID);

Wat is de betekenis van de X. Volgens mij moet jou database hier gaan klagen dat X geen aggregate functie is. Of heb je wel group by ID,X ?

Maar mijn query hoort wel degelijk te gaan samenstellen. Daar is de SUM voor.
 
Die X is ook een variabele, maar in deze tabel is die voor alle dezelfde. Dus gewoon een identieke waarde voor elke rij.

Eigenlijk kan je ze ook weglaten...
 
opgelost

Hoi, ik heb het zelf kunnen oplossen.

De tabel geindexeerd en het is berekend op 15minuten

Toch bedankt

Mvg
Rowan
 
Je maakt nu veel te veel tables aan, om iets eenvoudigs te doen. (en 15 minuten is echt te veel zelfs voor een grote database!)

Mijn oplossing moet ook werken maar ik zal vanavond een dbms installeren.. Dan zal ik eens testen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan