|
| 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
| |
|
|