/ 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
Sortering efter antal forekomster
Fra : Mobster


Dato : 25-09-03 17:55

Hejsa,

Jeg har et lille MySQL problem som jeg ikke lige selv kan løse.
Jeg har en tabel med et feldt der hedder Day, det jeg skal bruge hvordan jeg
får MySQL til at returnere indholdet i Day i rækkefølgen fra den der
optræder flest gange til den der optræder færrest gange.

Har jeg fx 100 rækker, 60 rækker med '4. april' og 40 rækker med '21.
marts', så skal databasen returnere
[0] -> 4. april
[1] -> 21. marts

Jeg programmere i PHP og har lavet funktioner der kan sortere, men det
kræver at jeg hiver alle data ud af databasen og sortere dem med en
php-funktion, og skal det gøres en del gange og med mange data er det alt
for langsomt...

Håber der er nogle der kan hjælpe!

Mobster



 
 
Troels Arvin (25-09-2003)
Kommentar
Fra : Troels Arvin


Dato : 25-09-03 21:53

On Thu, 25 Sep 2003 18:55:14 +0200, Mobster wrote:

> Har jeg fx 100 rækker, 60 rækker med '4. april' og 40 rækker med '21.
> marts', så skal databasen returnere
> [0] -> 4. april
> [1] -> 21. marts

_Skal_ det være til MySQL?

Og _skal_ ranking nummereres som du foreslår (0,1,..)? - Det burde være
let at regne sig frem til alligevel, når man gennemløber det rank'ede
result-set. Hvad vil du gøre, hvis frekvensen for to navne er den samme -
skal de da have samme nummer?

Her er noget simpel standard SQL, der burde kunne bruges (dog ikke i
MySQL, der ikke understøtter subselects):

SELECT *
FROM (
SELECT COUNT(*),fornavn
FROM person
GROUP BY fornavn
) as foo
ORDER BY count DESC;

Kunne fx. give:

count | fornavn
-------+----------
3 | Frederik
3 | Marie
2 | Peter
2 | Sofie
2 | Sofus
1 | Eline
1 | Linda
1 | Lise
1 | Louise
1 | Mogens
1 | Ole

Jeg kan ikke hitte på nogen løsning i MySQL's SQL.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Peter Brodersen (25-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 25-09-03 22:05

On Thu, 25 Sep 2003 22:53:16 +0200, Troels Arvin <troels@arvin.dk>
wrote:

>Her er noget simpel standard SQL, der burde kunne bruges (dog ikke i
>MySQL, der ikke understøtter subselects):
>
>SELECT *
>FROM (
> SELECT COUNT(*),fornavn
> FROM person
> GROUP BY fornavn
>) as foo
>ORDER BY count DESC;

Hvorfor ikke blot:

SELECT COUNT(*) AS antal,fornavn
FROM person
GROUP BY fornavn
ORDER BY antal DESC

... eller har jeg misforstået spørgsmålet?

Counter-tingen kan vel gøres med:

SET @i := 0;
SELECT @i.=(@i+1) AS i, COUNT(*) AS antal, fornavn
FROM person
GROUP BY fornavn
ORDER BY antal DESC

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Troels Arvin (25-09-2003)
Kommentar
Fra : Troels Arvin


Dato : 25-09-03 22:12

On Thu, 25 Sep 2003 23:04:51 +0200, Peter Brodersen wrote:

> Hvorfor ikke blot:

Du har så ret.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Jimmy (25-09-2003)
Kommentar
Fra : Jimmy


Dato : 25-09-03 22:10


"Mobster" <mobster@creationzone.net> wrote in message
news:3f731dee$0$32492$edfadb0f@dread16.news.tele.dk...
> Hejsa,
>
> Jeg har et lille MySQL problem som jeg ikke lige selv kan løse.
> Jeg har en tabel med et feldt der hedder Day, det jeg skal bruge hvordan
jeg
> får MySQL til at returnere indholdet i Day i rækkefølgen fra den der
> optræder flest gange til den der optræder færrest gange.
>
> Har jeg fx 100 rækker, 60 rækker med '4. april' og 40 rækker med '21.
> marts', så skal databasen returnere
> [0] -> 4. april
> [1] -> 21. marts

SELECT Day, COUNT(*) AS Antal
FROM test
GROUP BY Day
ORDER BY Antal ASC

Jeg ville klare nummereringen i php'en.

Mvh
Jimmy



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

Månedens bedste
Årets bedste
Sidste års bedste