/ 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 og order by i samme select.
Fra : Ulrik Nielsen


Dato : 24-10-04 18:19

Hej NG,

Jeg har et problem med at få sorteret nogle data.
min select ser således ud:

SELECT
s.id,
s.domain,
l.date
FROM
psm_sites AS s,
psm_log AS l
WHERE
s.id = l.site_id
GROUP BY
domain
ORDER BY
date DESC

Den finder fint de rigtigt data, men de er sorteret efter doamin og ikke
som det var meningen efter date...

Jeg bruger MySQL.

Håber der er nogen der har en ide til hvad der kan gøres.

på forhånd tak
--
ulrik nielsen |
-----------------+---------------------------------------------------
quote or the day | You need to install an RTFM interface.
from bofh | http://www.cs.wisc.edu/~ballard/bofh/

 
 
Kristian Damm Jensen (25-10-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 25-10-04 08:31

Ulrik Nielsen <un.spam@tiscali.dk> wrote in message news:<417be3fe$0$249$edfadb0f@dread12.news.tele.dk>...
> Hej NG,
>
> Jeg har et problem med at få sorteret nogle data.
> min select ser således ud:
>
> SELECT
> s.id,
> s.domain,
> l.date
> FROM
> psm_sites AS s,
> psm_log AS l
> WHERE
> s.id = l.site_id
> GROUP BY
> domain
> ORDER BY
> date DESC
>
> Den finder fint de rigtigt data, men de er sorteret efter doamin og ikke
> som det var meningen efter date...
>
> Jeg bruger MySQL.
>
> Håber der er nogen der har en ide til hvad der kan gøres.

Umiddelbart virker det som en klokkeren fejl.

Men det kan godt undre mig, hvorfor du overhovedet laver en group by,
når du ikke anvender nogen aggregeringsfunktion. Det kan være med til
at forvirre MySQL.

VH
Kristian

Michael Foged (25-10-2004)
Kommentar
Fra : Michael Foged


Dato : 25-10-04 10:01

On Mon, 25 Oct 2004 00:31:17 -0700, Kristian Damm Jensen wrote:

> når du ikke anvender nogen aggregeringsfunktion

Og dette fik mig til at flyve i google, uden jeg dog blev spor klogere.

Vil du _kort_ forklare hvad du mener med en aggregeringsfunktion?

--
mvh
Michael Foged


Jens Gyldenkærne Cla~ (25-10-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-10-04 10:53

Michael Foged skrev:

> Vil du _kort_ forklare hvad du mener med en aggregeringsfunktion?

Jeg hopper lige ind. Aggregeringsfunktioner er funktioner der virker på
sæt af data i stedet for på enkelte poster. Det er fx COUNT, MIN, MAX,
AVG og SUM. Når man anvender aggregeringsfunktioner, skal alle felter i
select-listen enten være aggregerede (altså "omsluttet" af en
aggregeringsfunktion) eller være medtaget i et grupperingsudtryk.

Et par eksempler:

/* Tæl alle poster i tabellen */
SELECT COUNT(*) as antal FROM tabel

/* Tæl antal poster pr postnr */
SELECT postnr, COUNT(*) as antal FROM tabel GROUP BY postnr

/* Find mindste og højeste pris pr. varegruppe */
SELECT varegruppe, MIN(pris) as minpris, MAX(pris) as maxpris
FROM varer
GROUP BY varegruppe


Ugyldige eksempler (i begge tilfælde er problemet at der er felter der
hverken er aggregerede eller grupperede)

SELECT *, COUNT(*) as antal FROM tabel

SELECT felt1, felt2, COUNT(*) as antal
FROM tabel
GROUP BY felt1

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Michael Foged (25-10-2004)
Kommentar
Fra : Michael Foged


Dato : 25-10-04 11:26

On Mon, 25 Oct 2004 11:53:29 +0200, Jens Gyldenkærne Clausen wrote:

> Michael Foged skrev:
>
>> Vil du _kort_ forklare hvad du mener med en aggregeringsfunktion?
>
> Jeg hopper lige ind.

<snip en glimrende forklaring>

Tak for en god forklaring, så faldt der endnu en 10-øre på plads:)

--
mvh
Michael Foged

Kristian Damm Jensen (26-10-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-10-04 08:17

Michael Foged <spamme@mogif.de> wrote in message news:<pan.2004.10.25.09.00.47.871671@mogif.de>...
> On Mon, 25 Oct 2004 00:31:17 -0700, Kristian Damm Jensen wrote:
>
> > når du ikke anvender nogen aggregeringsfunktion
>
> Og dette fik mig til at flyve i google, uden jeg dog blev spor klogere.
>
> Vil du _kort_ forklare hvad du mener med en aggregeringsfunktion?

Nu har Jens skrevet en glilmrende forklaring, så den vil jeg ikke
uddybe.

Men en søgning på "aggregate function" i fx MySQLs on-line manual
ville sikkert give en del hit. Jeg oversatte bare ordet til dansk -
efter bedste evne.

Kristian

Michael Foged (26-10-2004)
Kommentar
Fra : Michael Foged


Dato : 26-10-04 09:22

On Tue, 26 Oct 2004 00:17:08 -0700, Kristian Damm Jensen wrote:

> Michael Foged <spamme@mogif.de> wrote in message
> news:<pan.2004.10.25.09.00.47.871671@mogif.de>...
>> On Mon, 25 Oct 2004 00:31:17 -0700, Kristian Damm Jensen wrote:
>>
>> > når du ikke anvender nogen aggregeringsfunktion
>>
>> Og dette fik mig til at flyve i google, uden jeg dog blev spor klogere.
>>
>> Vil du _kort_ forklare hvad du mener med en aggregeringsfunktion?
>
> Nu har Jens skrevet en glilmrende forklaring, så den vil jeg ikke
> uddybe.

ja, der blev det banket fast.

> Men en søgning på "aggregate function" i fx MySQLs on-line manual
> ville sikkert give en del hit. Jeg oversatte bare ordet til dansk -
> efter bedste evne.

Og jeg kunne ikke finde ud af at oversætte det til engelsk og på den
måde få et fornuftigt søgeresultat.

Men nu ved jeg både hvad det er og hvad det hedder på engelsk, tak for
det!

--
mvh
Michael Foged


Peter Brodersen (25-10-2004)
Kommentar
Fra : Peter Brodersen


Dato : 25-10-04 16:39

On 25 Oct 2004 00:31:17 -0700, damm@ofir.dk (Kristian Damm Jensen)
wrote:

>Men det kan godt undre mig, hvorfor du overhovedet laver en group by,
>når du ikke anvender nogen aggregeringsfunktion. Det kan være med til
>at forvirre MySQL.

I MySQLs tilfælde er der vist ingen risiko for forvirring, til trods
for den måske uhensigtsmæssige brug - omend vi har været inde på
brugen af aggregeringsfunktioner før i generel SQL :)

--
- Peter Brodersen

Ugens sprogtip: pc (og ikke PC)

Ulrik Nielsen (26-10-2004)
Kommentar
Fra : Ulrik Nielsen


Dato : 26-10-04 08:14

Peter Brodersen wrote:
> I MySQLs tilfælde er der vist ingen risiko for forvirring, til trods
> for den måske uhensigtsmæssige brug - omend vi har været inde på
> brugen af aggregeringsfunktioner før i generel SQL :)

det jeg ville opnå ved at gruppere pr domain var at jeg kun fik en
record pr. domain, problemet er bare at den får sorteret efter domain og
ikke efter den dato som jeg har i min "order by"...


--
ulrik nielsen |
-----------------+---------------------------------------------------
quote or the day | Firmware update in the coffee machine
from bofh | http://www.cs.wisc.edu/~ballard/bofh/

Kristian Damm Jensen (26-10-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-10-04 08:29


Ulrik Nielsen wrote:
> Peter Brodersen wrote:
> > I MySQLs tilfælde er der vist ingen risiko for forvirring, til
trods
> > for den måske uhensigtsmæssige brug - omend vi har været inde

> > brugen af aggregeringsfunktioner før i generel SQL :)
>
> det jeg ville opnå ved at gruppere pr domain var at jeg kun fik en
> record pr. domain, problemet er bare at den får sorteret efter
domain og
> ikke efter den dato som jeg har i min "order by"...

Selv om Peter hævder, at det ikke skulle betyde noget, så giver det
mig alligevel myrekryb at se group by anvendt på denne måde. Prøv at
indsætte aggregeringsfunktioner således (i det jeg går ud fra, at er
ligeglad med hvilken af de mulige værdier for id og date du får for
et givet domain)

SELECT
MAX(s.id),
s.domain,
MAX(l.date) AS MAX_DATE
FROM
psm_sites AS s,
psm_log AS l
WHERE
s.id = l.site_id
GROUP BY
domain
ORDER BY
MAX_DATE DESC

VH
Kristian


rpje (26-10-2004)
Kommentar
Fra : rpje


Dato : 26-10-04 08:50

"Ulrik Nielsen" skrev d. 24-10-04 18:19 dette indlæg :
> Hej NG,
>
> Jeg har et problem med at få sorteret nogle data.
> min select ser således ud:
>
> SELECT
> s.id,
> s.domain,
> l.date
> FROM
> psm_sites AS s,
> psm_log AS l
> WHERE
> s.id = l.site_id
> GROUP BY
> domain
> ORDER BY
> date DESC
>
> Den finder fint de rigtigt data, men de er sorteret efter doamin og
ikke
> som det var meningen efter date...
>
> Jeg bruger MySQL.
>
> Håber der er nogen der har en ide til hvad der kan gøres.
>
> på forhånd tak
> --
> ulrik nielsen |
> -----------------+---------------------------------------------------
> quote or the day | You need to install an RTFM interface.
> from bofh | http://www.cs.wisc.edu/~ballard/bofh/

Det giver ingen mening at benytte order by sammen med group by

En Group by udgave

SELECT
s.id,
s.domain,
l.date
FROM
psm_sites AS s,
psm_log AS l
WHERE
s.id = l.site_id
GROUP BY
l.date, s.domain, s.id

Først sorteres der efter date så domain til sidst id

En Order by udgave

SELECT
s.id,
s.domain,
l.date
FROM
psm_sites AS s,
psm_log AS l
WHERE
s.id = l.site_id
ORDER BY
l.date, s.domain, s.id

Først sorteres der efter date så domain til sidst id

MV.

Peter Jensen

--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Jens Gyldenkærne Cla~ (26-10-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-10-04 11:20

rpje skrev:

> Det giver ingen mening at benytte order by sammen med group by

Det gør det da i høj grad. Group by indebærer gruppering, men ikke
nødvendigvis sortering.

Jeg kender ikke til mysql, men i MSSQL er der fx forskel på følgende to
resultatsæt:

   select afdeling, count(*)
   from dmf_xls
   group by afdeling

   select afdeling, count(*)
   from dmf_xls
   group by afdeling
   order by afdeling

NB: Du må gerne klippe lidt i dine citater.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Kristian Damm Jensen (26-10-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-10-04 13:11


rpje wrote:

<snip>

> Det giver ingen mening at benytte order by sammen med group by

Vås. Group by og order by gør to forskellige ting.

For det første: At de fleste implementation i praksis foretager en
sortering for at kunne lave group by effektivt er et tilfælde. Man kan
ikke regne med det. (Som et andet svar på dit indlæg viser.)

For det andet: Det er ikke sikkert, at man ønsker at sortere på de
samme værdier som man grupperer efter. Det kunne fx være, at man
ville sortere på resultatet af aggregeringen:

select navn, count(*) as antal
from T
group by navn
order by antal

<snip>

Kristian


Søg
Reklame
Statistik
Spørgsmål : 177514
Tips : 31968
Nyheder : 719565
Indlæg : 6408618
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste