|
| group by problem Fra : Brian Kristjansen |
Dato : 12-01-06 14:52 |
|
Følgende forenklet tabel i mysql 4.0
user server aktiv
12 1 1
12 1 1
12 1 0
13 1 1
13 1 1
13 1 1
14 1 1
14 1 1
14 1 1
15 1 1
15 1 0
15 1 1
Jeg ønsker at få de kundenumre og servernumre ud, som ikke har et 0 i
aktiv - altså ønsker jeg ikke at få vist kundenummer 15 og 12 i min
forespørgsel. Jeg har prøvet mange ting, men uanset hvad kommer 12 og 15
altid med - nogen der kan hjælpe mig?
Med venlig hilsen:
Brian Kristjansen
| |
Peter Brodersen (12-01-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 12-01-06 16:33 |
|
On Thu, 12 Jan 2006 14:52:22 +0100, "Brian Kristjansen"
<skod@NOSPAMhotmail.com> wrote:
>Jeg ønsker at få de kundenumre og servernumre ud, som ikke har et 0 i
>aktiv - altså ønsker jeg ikke at få vist kundenummer 15 og 12 i min
>forespørgsel. Jeg har prøvet mange ting, men uanset hvad kommer 12 og 15
>altid med - nogen der kan hjælpe mig?
Jeg har spurgt om og skrevet om problemstillingen i
<cjiiqm$rko$1@katie.ellegaard.dk> - http://shor.ter.dk/200713155
Du har dog ikke mulighed for at benytte dig af subselects, men det
behøver heller ikke at være nødvendigt.
Jeg prøver lige at banke en passende query sammen. Den simple mulighed
må være at groupe på user, selecte SUM(aktiv=0) ud og så tjekke at
denne er lig nul (ingen forekomster af aktiv=0) i en HAVING.
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Peter Brodersen (12-01-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 12-01-06 16:37 |
|
On Thu, 12 Jan 2006 14:52:22 +0100, "Brian Kristjansen"
<skod@NOSPAMhotmail.com> wrote:
>Følgende forenklet tabel i mysql 4.0
SELECT user, server, aktiv
FROM tabel
GROUP BY user, server
HAVING SUM(aktiv=0) = 0;
Alternativt:
...
HAVING NOT SUM(aktiv=0);
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Kristian Damm Jensen (12-01-2006)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 12-01-06 21:10 |
|
Peter Brodersen wrote:
> On Thu, 12 Jan 2006 14:52:22 +0100, "Brian Kristjansen"
> <skod@NOSPAMhotmail.com> wrote:
>
>> Følgende forenklet tabel i mysql 4.0
>
> SELECT user, server, aktiv
> FROM tabel
> GROUP BY user, server
> HAVING SUM(aktiv=0) = 0;
>
> Alternativt:
> ..
> HAVING NOT SUM(aktiv=0);
Er den syntaks i overensstemmelse med standarden? Jeg har ikke set den før.
Det er i al fald ikke i overensstemmelse med standarden, at select-listen
indeholder elementer, der ikke forekommer i group by.
Hvis man kan antage, at aktiv altid er enten 0 eller 1, kan man holde sig
til standarden med
SELECT user, server
FROM tabel
GROUP BY user, server
HAVING SUM(aktiv) = COUNT(aktiv);
--
Kristian Damm Jensen
| |
Brian Kristjansen (13-01-2006)
| Kommentar Fra : Brian Kristjansen |
Dato : 13-01-06 11:51 |
|
> Peter Brodersen wrote:
>> On Thu, 12 Jan 2006 14:52:22 +0100, "Brian Kristjansen"
>> <skod@NOSPAMhotmail.com> wrote:
>>
>>> Følgende forenklet tabel i mysql 4.0
>>
>> SELECT user, server, aktiv
>> FROM tabel
>> GROUP BY user, server
>> HAVING SUM(aktiv=0) = 0;
>>
>> Alternativt:
>> ..
>> HAVING NOT SUM(aktiv=0);
>
> Er den syntaks i overensstemmelse med standarden? Jeg har ikke set den
> før.
>
> Det er i al fald ikke i overensstemmelse med standarden, at select-listen
> indeholder elementer, der ikke forekommer i group by.
>
> Hvis man kan antage, at aktiv altid er enten 0 eller 1, kan man holde sig
> til standarden med
>
> SELECT user, server
> FROM tabel
> GROUP BY user, server
> HAVING SUM(aktiv) = COUNT(aktiv);
>
> --
> Kristian Damm Jensen
>
Hej igen
Jeg læste vist med at halvt øje åben, så jeg fik lavet en kombination af
jeres 2 svar der endte ud i,
SELECT user, server
FROM tabel
GROUP BY user, server
HAVING SUM(aktiv) = 0;
Men det virkede
Tusind tak begge 2!
Med venlig hilsen:
Brian Kristjansen
| |
Peter Brodersen (13-01-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 13-01-06 13:28 |
|
On Thu, 12 Jan 2006 21:09:44 +0100, "Kristian Damm Jensen"
<kristiandammNO@SPAMyahoo.dk> wrote:
>Er den syntaks i overensstemmelse med standarden? Jeg har ikke set den før.
I MySQL virker det fint (gennemprøvet før afsendelse). Det er dog
korrekt, at alle elementer bør medtages i group by. Dette er vist
nævnt jævnligt gange i gruppen
Der er dog derudover ingen grund til overhovedet at medtage "aktiv" i
select-listen her. Jeg overvejede at lave en followup-post, men
tænkte, at idet brugeren benyttede MySQL, ville løsningen alligevel
virke fint.
>Hvis man kan antage, at aktiv altid er enten 0 eller 1, kan man holde sig
>til standarden med
>
>SELECT user, server
>FROM tabel
>GROUP BY user, server
>HAVING SUM(aktiv) = COUNT(aktiv);
Well, man kan vel blot udelade aktiv fra select-listen i mit forslag,
for at holde sig til standarden
Mit eksempel forudsætter ikke at aktiv altid enten er 0 eller 1 - men
dog stadigvæk at aktiv ikke kan påtage sig negative værdier.
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
|
|