Avatar billede !asp Nybegynder
05. juni 2000 - 13:22 Der er 10 kommentarer

SQL syntaks : hvad tæller den

Hvad tæller COUNT(*) as Nums ?

SELECT hus.id, hus.title, COUNT(*) as Nums FROM huse,svar
WHERE huse.id = svar.id AND
((huse.title LIKE '%tst%' OR huse.hus LIKE '%tst%' OR
svar.svar LIKE '%tst%')) GROUP BY
huse.title,huse.hus ORDER BY Nums DESC,
huse.title LIMIT 0, 25
Avatar billede sjensen Nybegynder
05. juni 2000 - 13:30 #1
den tæller antallet af records i dit table, der tilfredsstiller de kriterier du har defineret i din where-clause.

ikke antallet af records i hverken huse eller svar tabellerne, men det antal records den finder i alt, hvor alle kriterierne er opfyldt.
Avatar billede sjensen Nybegynder
05. juni 2000 - 13:34 #2
yderligere forklaring:

teknisk set "bygger" din select en ny tabel (i memory) der kun indeholder felterne id og title, begge fra hus-tabellen, og count(*) angiver så antallet af records i din, nye, tabel.

Og der er selvfølgeligt kun de record fra hus, der kan godkendes iht. de kriterier du har angivet i where-delen.
Avatar billede !asp Nybegynder
05. juni 2000 - 13:34 #3
Hvorfor er tallet i Nums forskelligt for hver række ?

Giver det mening at sortere efter Nums ?
Avatar billede dmk Nybegynder
05. juni 2000 - 13:35 #4
Hvis jeg prøver at genskabe din sql, og indsætter count(huse.title), count(huse.hus),
så får jeg samme resultat af alle 3 counts. Så mit bud må være, at count(*) tæller hvor mange
records de enkelte group by-resultater indeholder.

Jeg ved dog ikke lige om min syntaks blev det samme som din, da jeg bare lavede en simpel lille tabel, med meget lidt data i.

DMK
Avatar billede dmk Nybegynder
05. juni 2000 - 13:37 #5
sjensen:

Når du har en group by i din sql, så tæller count resultatet af denne, og ikke hele resultatets størrelse. Derfor er count feltet også forskelligt for hver result-record.

DMK
Avatar billede !asp Nybegynder
05. juni 2000 - 13:49 #6
Det jeg søger er at den skal sortere efter hvor mange den fandt i hver række. Er jeg på rette vej ?  :)
Avatar billede dmk Nybegynder
05. juni 2000 - 13:58 #7
Ja, det er du da! Det du har lavet skulle gerne gøre tricket for dig. Er den da gal?

DMK
Avatar billede !asp Nybegynder
05. juni 2000 - 14:04 #8
jeg syntes ikke lige den tæller rigtigt. Den viser et tal der er højere end det antal forekomster jeg kan tælle.
Avatar billede dmk Nybegynder
05. juni 2000 - 14:07 #9
Det har jeg lidt svært ved at forstå. Men det er også lidt svært for mig at teste, uden at skulle lave en database der ligner din fuldstændig, og som har en masse indhold. På den lille testtabel jeg lavede, fik jeg i hvert fald det rigtige resultat vha count(*).

DMK
Avatar billede kibeha Nybegynder
10. november 2000 - 12:25 #10
Problemet er nok at du har en join mellem huse og svar. Hvis du har f.eks. 2 svar-records med samme id, som begge opfylder where-betingelsen, så vil det id tælle 2 gange i din count(*) !

Prøv noget i retning af \'count(distinct huse.id)\' (det skulle vist være Oracle syntax, men det burde virke nogenlunde på samme måde i standard SQL).
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