/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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/

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste