Avatar billede nobrainer Nybegynder
22. juli 2008 - 03:09 Der er 12 kommentarer og
1 løsning

Order by og Count ?

Jeg har en lille tabel med:
- student
- age
- school

Så vil jeg gerne ende ud med en liste som denne:
Jens - 19 - Mølleskole (mest brugte skole)
Mike - 18 - Mølleskole
Anne - 19 - Mølleskole
John - 17 - Mølleskole
Ross - 18 - Bakkeskolen
Kate - 17 - Bakkeskolen
Pete - 18 - Skiskolen (mindst brugte school)

Altså, at de elever som går i den skole med fleste records, bliver vist først og de elever som går i en skole med få elever bliver vist tilsidst.

Men det er altså ikke blot en COUNT og GROUP BY, for så kommer de enkelte records jo ikke til syne som ovenfor, og det er jo det jeg vil.

Hvordan gør jeg lige det??

Tak!!
Avatar billede arne_v Ekspert
22. juli 2008 - 04:07 #1
prøv:

SELECT student,age,school
FROM tabel t1
ORDER BY (SELECT COUNT(*) FROM tabel t2 WHERE t2.school=t1.school) DESC

hvis MySQL 5.0+ så bør det virke !
Avatar billede nobrainer Nybegynder
23. juli 2008 - 10:29 #2
Må jeg lige spørge vildt dumt
t1 og t2, hvor kommer det fra?

tabellens navn må være "table" ikke?

Og til sidst, trækker det tænder på serveren hvis jeg laver en select inden i en select?
Avatar billede nobrainer Nybegynder
23. juli 2008 - 10:58 #3
Plejer man ikke at skrive: table AS t1?

På forhånd tak!
Avatar billede nobrainer Nybegynder
23. juli 2008 - 11:23 #4
Et side spørgmål mere. Det gør ikke ngoet hvis du ikke kan svare på det.

Er det lige meget, om man siger COUNT(*) eller COUNT(age)?
Den skal jo kun tælle een kolonne, hvis man vælger det sidste, mens at den jo skal tælle det hele hvis man vælger *
Avatar billede arne_v Ekspert
23. juli 2008 - 15:01 #5
tabelnavn alias

og

tabelnavn AS alias

betyder det samme
Avatar billede arne_v Ekspert
23. juli 2008 - 15:02 #6
COUNT(*) taeller alle raekker som matcher kriterie

COUNT(age) taeller alle raekker hvor age feltet ikke er NULL og stadigvaek matcher kriterie

hvis age aldrig er NULL, saa er der ingen forskel

hvis age kan vaere NULL maa du vaelge om de skal taelles med eller ej
Avatar billede arne_v Ekspert
23. juli 2008 - 15:02 #7
hvis der er index paa school feltet saa boer den performe OK
Avatar billede kjulius Novice
23. juli 2008 - 19:46 #8
Et muligt alternativ kunne være noget ala:

SELECT student, age, school
FROM tabel1
INNER JOIN (
  SELECT school, COUNT(*) AS elever
  FROM tabel1
  GROUP BY school) AS tmp ON tmp.school = tabel1.school
ORDER BY elever DESC
Avatar billede arne_v Ekspert
30. august 2008 - 02:13 #9
nobrainer ?
Avatar billede nobrainer Nybegynder
01. september 2008 - 10:17 #10
Sorry, hvordan lukker jeg en tråd??
Avatar billede arne_v Ekspert
01. september 2008 - 14:57 #11
Beder dem hvis svar du har kunnet bruge ligge et svar, venter til de gør det, accepterer
disse var (ved at markede deres navne i en combo box ude til venstre og klikke accepter).
Avatar billede nobrainer Nybegynder
01. september 2008 - 15:03 #12
Ok, læg et svar! :-)
Og dybt undskyld at jeg helt glemte det hele. :(
Avatar billede arne_v Ekspert
01. september 2008 - 15:31 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester