Avatar billede sunep Nybegynder
13. august 2003 - 22:23 Der er 23 kommentarer og
2 løsninger

SQL - distinct sortere efter count

Er det muligt at lave en sql sætning der opfylder følgene krav.

1. skal bruge distinct på kollonen "file" så kun forskellige poster returneres

2. skal sorterer efter hvor mange poster der er med hver unik post

så hvis jeg har følgende tabel nedenunder:

file      col2          col3
-------------------------------
fil2      kasj          asn
fil3      lasnd        akl
fil1      lasjd        lasd
fil3      ndsa          kajsdn
fil2      lasm          las
fil1      asd          asd
fil2      asd          asd
fil2      asd          asd
fil1      asd          asd

så giver det følgende output

fil2 (da den har flest counts)
fil1 (da den har næstflest)
fil3 (da den har mindst counts)
Avatar billede lap Nybegynder
13. august 2003 - 22:26 #1
select file,count(*) from <tabel> group by file order by count(*) desc;
Avatar billede tipsen Nybegynder
13. august 2003 - 22:31 #2
SELECT file, count(*) AS hits FROM tabel GROUP BY file ORDER BY hits DESC;
Avatar billede lap Nybegynder
13. august 2003 - 22:32 #3
tipsen>> det ligner vist hinanden :-)
Avatar billede sunep Nybegynder
13. august 2003 - 22:32 #4
ehh jeg får en fejl!

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/pub/ftpstats.php on line 124

linie 124 består af:

while ($row = mysql_fetch_array($result)) {
  echo $row["file"];
}

min $result ser sådan ud

$result = mysql_query("select file,count(*) from xfer_stats group by file order by count(*) desc");
Avatar billede sunep Nybegynder
13. august 2003 - 22:33 #5
tipsen virkede.. men de ser da ens ud????
Avatar billede lap Nybegynder
13. august 2003 - 22:33 #6
lav alias (as hits) og samme i order by - som tipsen skrev - formentlig kan php ikke "tåle" en kolonne med navnet count(*)
Avatar billede sunep Nybegynder
13. august 2003 - 22:36 #7
okay.. hvae skal jeg dele points?

group - den har jeg adrig brugt før hvad gør den helt præcist?
Avatar billede tipsen Nybegynder
13. august 2003 - 22:37 #8
COUNT() er en operation, hvilket ikke er lovligt at bruge i et ORDER BY statement i MySQL (eller Ansi SQL for den sags skyld)
Avatar billede tipsen Nybegynder
13. august 2003 - 22:37 #9
group by laver "grupperinger" efter de felter der angives.
Avatar billede lap Nybegynder
13. august 2003 - 22:38 #10
ok, i oracle er det tilladt - men de overholder jo også ansi-sql (næsten :-)
Avatar billede tipsen Nybegynder
13. august 2003 - 22:38 #11
Avatar billede sunep Nybegynder
13. august 2003 - 22:38 #12
altså den fungerer lidt ligesom distinct?
Avatar billede lap Nybegynder
13. august 2003 - 22:38 #13
læs: grupperinger = opsummeringsniveau
Avatar billede lap Nybegynder
13. august 2003 - 22:39 #14
ja, lidt ligesom distinct
Avatar billede tipsen Nybegynder
13. august 2003 - 22:39 #15
Du kan give mig 10 point for mine kommentarer, så er det fint med mig.
Avatar billede lap Nybegynder
13. august 2003 - 22:40 #16
en mulig fejl i sql:

følgende 2 rækker tæller 2 gange:

fil1  asd asd
fil1  asd asd
Avatar billede tipsen Nybegynder
13. august 2003 - 22:40 #17
-hvilket selvfølgelig kræver et svar...
Avatar billede tipsen Nybegynder
13. august 2003 - 22:41 #18
-hvorfor mener du at ovenstående er en fejl?
Avatar billede lap Nybegynder
13. august 2003 - 22:43 #19
Hvis du ønsker at tælle antallet af distincte records, så er dette kun 1 - og ikke 2, hvorimod hvis du ønsker at tælle antallet af gange, en værdi er repræsenteret i kolonnen "file", så er den korrekt.

citat: "skal sorterer efter hvor mange poster der er med hver unik post" - en uniq post gælder hele posten/rækken, og ikke alene 1. kolonne.
Avatar billede sunep Nybegynder
13. august 2003 - 22:45 #20
ahh min fejl

den sætning jeg fik af jer er det jeg søger :) så det er bare fjong
Avatar billede lap Nybegynder
13. august 2003 - 22:46 #21
det var godt - det andet tror jeg ikke ville være helt simpelt (uden lidt "gris" :-)
Avatar billede lap Nybegynder
13. august 2003 - 22:46 #22
takker for point :-)
Avatar billede sunep Nybegynder
13. august 2003 - 22:47 #23
er det kun mysql 4 der kan lave subquerys?
Avatar billede lap Nybegynder
13. august 2003 - 22:50 #24
aner intet om mysql - men nej, Oracle, informix og db2 kan også :-)
Avatar billede tipsen Nybegynder
13. august 2003 - 23:04 #25
Ældre versioner af mysql (<4) kan ikke, hvis det er hvad du vil vide.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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

IT-JOB

Forsknings-, Uddannelses- og Digitaliseringsministeriet

Vil du være med at udvikle sikkerhed og compliance i CPR?

Netcompany A/S

IT Consultant

Netcompany A/S

Linux Operations Engineer

Everllence

R&D Data Scientist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operations Center ved Cyberdivisionen