/ 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
Problemer med Group By
Fra : Carzten Christensen


Dato : 20-04-06 18:04

Jeg er kørt fast med en forespørgsel og har brug for hjælp.

Fra denne tabel

id   points   kulør   værdi   kabale
1   1   ruder   8   d
2   2   ruder   9   d
3   3   ruder   10   d
4   1   ruder   7   e
5   2   ruder   6   e
6   3   ruder   5   e
7   3   spar   5   g
8   2   spar   6   g
9   1   spar   7   g
10   1   spar   8   h
11   2   spar   9   h


Skal jeg for hver kabaleværdi bruge kortet med det højeste antal
points.
Derfor bruger jeg group by kabale

SELECT id, max(points), kulør, værdi, kabale FROM straffen_bord group
by kabale

Det jeg får ud af denne forespørgsel er dog kun, første kort i hver
kabalegruppe.

Jeg har undersøgt DISTINCT og HAVING, som jeg har en fornemmelse af
kan hjælpe, men
jeg kan ikke finde det svar jeg skal bruge.

Forespørgselen skal her finde kortene
ruder 10, ruder 5, spar 5 og spar 9

Jeg bruger MySQL 4.1, du kan evt finde et sql script til at generere
tabel + data
her : http://carzten.dk/straf.txt

På forhånd tak for hjælpen.

mvh, Carzten
http://carzten.dk

 
 
Kristian Damm Jensen (20-04-2006)
Kommentar
Fra : Kristian Damm Jensen


Dato : 20-04-06 19:46

Carzten Christensen wrote:
> Jeg er kørt fast med en forespørgsel og har brug for hjælp.
>
> Fra denne tabel
>
> id points kulør værdi kabale
> 1 1 ruder 8 d
> 2 2 ruder 9 d
> 3 3 ruder 10 d
> 4 1 ruder 7 e
> 5 2 ruder 6 e
> 6 3 ruder 5 e
> 7 3 spar 5 g
> 8 2 spar 6 g
> 9 1 spar 7 g
> 10 1 spar 8 h
> 11 2 spar 9 h
>
>
> Skal jeg for hver kabaleværdi bruge kortet med det højeste antal
> points.
> Derfor bruger jeg group by kabale
>
> SELECT id, max(points), kulør, værdi, kabale FROM straffen_bord group
> by kabale
>
> Det jeg får ud af denne forespørgsel er dog kun, første kort i hver
> kabalegruppe.
>
> Jeg har undersøgt DISTINCT og HAVING, som jeg har en fornemmelse af
> kan hjælpe, men
> jeg kan ikke finde det svar jeg skal bruge.
>
> Forespørgselen skal her finde kortene
> ruder 10, ruder 5, spar 5 og spar 9
>
> Jeg bruger MySQL 4.1, du kan evt finde et sql script til at generere
> tabel + data
> her : http://carzten.dk/straf.txt
>
> På forhånd tak for hjælpen.

Først en select, der findes den højeste værdi for hver kabale, og ikke
andet:

select kabale, max(point)
from straffen_bord
group by kabale

Det kunne du også selv have gjort. Tricket kommer når man bruger den som
subselect for at finde alle de andre værdier for det pågældende kort:

select *
from straffen_bord sb1
where point =
(select max(point)
from straffen_bord sb2
where sb1.kabale = sb2.kabale)

En ren klassiker. Havde vi en FAQ i denne gruppe, ville denne konstruktion
være selvskreven.

--
Kristian Damm Jensen



Carzten Christensen (20-04-2006)
Kommentar
Fra : Carzten Christensen


Dato : 20-04-06 20:51

On Thu, 20 Apr 2006 20:46:20 +0200, "Kristian Damm Jensen"
<dNOamSPmAM.usenet@kristiandamm.dk> wrote:

>Carzten Christensen wrote:
>> Jeg er kørt fast med en forespørgsel og har brug for hjælp.
>>
>> Fra denne tabel
>>
>> id points kulør værdi kabale
>> 1 1 ruder 8 d
>> 2 2 ruder 9 d
>> 3 3 ruder 10 d
>> 4 1 ruder 7 e
>> 5 2 ruder 6 e
>> 6 3 ruder 5 e
>> 7 3 spar 5 g
>> 8 2 spar 6 g
>> 9 1 spar 7 g
>> 10 1 spar 8 h
>> 11 2 spar 9 h
>>
>>
>> Skal jeg for hver kabaleværdi bruge kortet med det højeste antal
>> points.
>> Derfor bruger jeg group by kabale
>>
>> SELECT id, max(points), kulør, værdi, kabale FROM straffen_bord group
>> by kabale
>>
>> Det jeg får ud af denne forespørgsel er dog kun, første kort i hver
>> kabalegruppe.
>>
>> Jeg har undersøgt DISTINCT og HAVING, som jeg har en fornemmelse af
>> kan hjælpe, men
>> jeg kan ikke finde det svar jeg skal bruge.
>>
>> Forespørgselen skal her finde kortene
>> ruder 10, ruder 5, spar 5 og spar 9
>>
>> Jeg bruger MySQL 4.1, du kan evt finde et sql script til at generere
>> tabel + data
>> her : http://carzten.dk/straf.txt
>>
>> På forhånd tak for hjælpen.
>
>Først en select, der findes den højeste værdi for hver kabale, og ikke
>andet:
>
>select kabale, max(point)
>from straffen_bord
>group by kabale
>
>Det kunne du også selv have gjort. Tricket kommer når man bruger den som
>subselect for at finde alle de andre værdier for det pågældende kort:
>
>select *
>from straffen_bord sb1
>where point =
> (select max(point)
> from straffen_bord sb2
> where sb1.kabale = sb2.kabale)
>
>En ren klassiker. Havde vi en FAQ i denne gruppe, ville denne konstruktion
>være selvskreven.


Tusind tak for svaret, jeg var kørt uhjælpeligt fast, og er nu videre


Jeg havde prøvet med en subselect, men kunne ikke få det til at virke,
den du har skrevet giver præcis det svar jeg skal bruge.

mvh, Carsten

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

Månedens bedste
Årets bedste
Sidste års bedste