[interbase] Group By Probleem

Pagina: 1
Acties:

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Ik heb de volgende query:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT * FROM 
        OI_UITVOERING
    LEFT JOIN
        ROO_BIJEENKOMST
    ON
        OI_UITVOERING.ID = ROO_BIJEENKOMST.OI_UITVOERING_ID
    LEFT JOIN
        OI_CURSUS
    ON
        OI_CURSUS.ID = OI_UITVOERING.CURSUS_ID
    GROUP BY
        ROO_BIJEENKOMST.ID


Alleen: hier krijg ik een dikke SQL error op:

SQL:
1
2
3
Dynamic SQL Error
-SQL error code = -104
-invalid column reference


Zodra ik de GROUP BY weglaat, werkt alles als een tierelier, maar ik heb die group by dus nodig.

Wat doe ik fout? Dit is toch gewoon een geldige SQL Query? In MySQL werkt dit namelijk foutloos...

[ Voor 14% gewijzigd door SchizoDuckie op 13-11-2003 16:40 ]

Stop uploading passwords to Github!


Verwijderd

Kolom opnemen in je select. Ander mag je die niet gebruiken in je group by.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik kan me niet voorstellen dat dit in MySQL foutloos werkt. In SQL server werk het in ieder geval niet.

Als je GROUP BY gebruikt moeten de columns in het SELECT statement oftwel in de GROUP BY staan of in een 'aggregate' functie zitten (SUM, MAX, COUNT etc.)

Denk er maar eens overna.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Tja, MySQL is niet zo strict.
Je moet alle velden uit je select-list die geen aggregated function zijn opnemen in je group by list.

Ik zie trouwens niet in waarom je in die query een group by wilt gebruiken. Je gebruikt nl. geen aggregated functions (zoals MAX(), SUM(), ...)

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
offtopic:
[quote]whoami schreef op 13 november 2003 @ 16:43:
Tja, MySQL is niet zo strict.
[/quote]

maar wat in geeft MySQL dan bij de volgende query voor 'bar' terug?

SELECT foo, bar FROM tabel
GROUP by foo

Oops! Google Chrome could not find www.rijks%20museum.nl


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
whoami schreef op 13 november 2003 @ 16:43:
Tja, MySQL is niet zo strict.
Je moet alle velden uit je select-list die geen aggregated function zijn opnemen in je group by list.

Ik zie trouwens niet in waarom je in die query een group by wilt gebruiken. Je gebruikt nl. geen aggregated functions (zoals MAX(), SUM(), ...)
Damn dat suckt best hard, want uiteindelijk wordt het dus best een grote query waar ik een veld of 50 uit nodig heb.

Ik wil 'm groupen omdat er meerdere rows met de zelfde ROO_BIJEENKOMST.ID in de tabel kunnen staan, en ik er maar 1 nodig heb per ID.

Stop uploading passwords to Github!


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Papa Eend schreef op 13 november 2003 @ 16:48:
[...]


Ik wil 'm groupen omdat er meerdere rows met de zelfde ROO_BIJEENKOMST.ID in
de tabel kunnen staan, en ik er maar 1 nodig heb per ID.
Kijk, dat bedoelde ik met ' denk er eens over na'. Hoe moet de db weten welke records jij van de andere kolommen wilt hebben?

code:
1
2
3
4
ROO_BIJEENKOMST.ID    ANDER_VELD
1                             10
1                             20
1                             18


Zie je? Welke waarde van ANDER_VELD wil je nu hebben? 10, 20 of 18??
Daar heb je dus de aggregate functies voor nodig!

SELECT ROO_BIJEENKOMST.ID, MAX (ANDER_VELD) FROM tabel
GROUP B ROO_BIJEENKOMST.ID

[ Voor 4% gewijzigd door P_de_B op 13-11-2003 16:54 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Update!

Thx voor alle hulp :) Het is uiteindleijk echt een über query geworden :X

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    SELECT DISTINCT
        OI_UITVOERING.ID AS OIUID, 
        OI_UITVOERING.CURSUS_ID,
        OI_UITVOERING.USR5,
        OI_UITVOERING.USR4,
        OI_UITVOERING.K5CALC,
        OI_UITVOERING.NAAM,
        OI_UITVOERING.STATUS_CODE,
        OI_UITVOERING.DOCENT_CODE,
        OI_UITVOERING.CURSUS_ID,
        OI_UITVOERING.STARTDATUM,
        OI_UITVOERING.EINDDATUM,
        ROO_BIJEENKOMST.USR1 AS BLK,
        BAS_LOKATIE.CODE AS LOCCODE,
        BAS_LOKATIE.NAAM AS LOCNAAM,
        COUNT(OI_INSCHRIJVING.ID) AS NUMIN
    FROM 
        OI_UITVOERING 
    LEFT JOIN
        ROO_BIJEENKOMST 
    ON
        OI_UITVOERING.ID = ROO_BIJEENKOMST.OI_UITVOERING_ID
    LEFT JOIN 
        OI_CURSUS
    ON
        OI_CURSUS.ID = OI_UITVOERING.CURSUS_ID
    LEFT JOIN 
        OI_INSCHRIJVING
    ON
        OI_INSCHRIJVING.OI_UITVOERING_ID = OI_UITVOERING.ID
    LEFT JOIN 
        OI_INSCHRIJVING_STATUS
    ON
        OI_INSCHRIJVING.STATUS_CODE = OI_INSCHRIJVING_STATUS.CODE
    LEFT JOIN
        BAS_LOKATIE
    ON
        BAS_LOKATIE.CODE = OI_UITVOERING.LOKATIE_CODE
    WHERE 
        OI_UITVOERING.USR5 >= '0'
    AND
        OI_UITVOERING.ID IS NOT NULL
    AND
        OI_UITVOERING.STARTDATUM > '08/01/2003'
    AND 
        (
                OI_INSCHRIJVING_STATUS.CODE = '40' 
            OR 
                OI_INSCHRIJVING_STATUS.CODE = '55' 
            OR 
                OI_INSCHRIJVING_STATUS.CODE = '60'
        )
    GROUP BY 
        OI_UITVOERING.USR5,
        ROO_BIJEENKOMST.USR1,
        OI_UITVOERING.ID,
        OI_UITVOERING.DOCENT_CODE,
        OI_UITVOERING.USR4,
        OI_UITVOERING.STARTDATUM,
        OI_UITVOERING.EINDDATUM,
        OI_UITVOERING.K5CALC,
        OI_UITVOERING.CURSUS_ID,
        OI_UITVOERING.NAAM,  
        OI_UITVOERING.STATUS_CODE,
        BAS_LOKATIE.CODE,
        BAS_LOKATIE.NAAM
    ORDER BY
        OI_UITVOERING.USR5 ASC

Stop uploading passwords to Github!


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Waarom zet je quotes rond die getallen? Ik mag toch aannemen dat je getallen niet in char/varchar velden zet, maar in numerieke velden?
Je kan ook een 'IN' operator gebruiken ipv die ( ( veld = 40 OR veld = 50 ... ) ).

Ben je wel zeker dat je overal OUTER joins nodig hebt?

https://fgheysels.github.io/


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
whoami schreef op 18 november 2003 @ 10:30:
Waarom zet je quotes rond die getallen? Ik mag toch aannemen dat je getallen niet in char/varchar velden zet, maar in numerieke velden?
Je kan ook een 'IN' operator gebruiken ipv die ( ( veld = 40 OR veld = 50 ... ) ).

Ben je wel zeker dat je overal OUTER joins nodig hebt?
• omdat die getallen in de tabel in char velden staan inderdaad :X (ik heb die db niet gemaakt, het is de db van ons administratiesysteem)
• Die in zal ik even naar kijken
• Over die outer joins: Heb je evt. nog andere tips om de performance op te krikken? ik heb nl. niet veel ervaring met dit soort huge queries.

Stop uploading passwords to Github!


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Papa Eend schreef op 18 november 2003 @ 11:28:
[...]
• Over die outer joins: Heb je evt. nog andere tips om de performance op te krikken? ik heb nl. niet veel ervaring met dit soort huge queries.
Indexen leggen op de velden waarop je zoekt en joined.

https://fgheysels.github.io/

Pagina: 1