Den ene tabel error indeholder emner der har været fejl i, til en prøve og den anden holder de emner der har været rigtige til prøven. Tallene i subjectID er hvilket emne der var fejl i. Det jeg skal bruge af hvor mange provent af feks 10 er rigtige. Feks er der 2 af emne 10 rigtige og der er 5 ialt derfor 2/5*100 = 40% rigtige af emne 10.
Jeg har prøvet at lavet noget med join, subquery og union men har ikke kunne få lavet noget. Er der nogen som kan være behjælpelige?
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
SELECT subjectid,ncorrect*1.0/nerror FROM (SELECT subjectID,COUNT(*) AS ncorrect FROM correct GROUP BY subjectid) x, (SELECT subjectID,COUNT(*) AS nerror FROM error GROUP BY subjectid) y WHERE x.subjectid=y.subjectid
Synes godt om
Slettet bruger
19. december 2008 - 17:24#2
Ja den virkede, skulle bare bruge (ncorrect*100/(ncorrect+nerror)) istedet for ncorrect*1.0/nerror.
Udover det, er det så muligt at alle dem hvor der er 100% fejl, også kommer med på listen?
SELECT subjectid,IFNULL(ncorrect,0)*100/nerror FROM (SELECT subjectID,COUNT(*) AS ncorrect FROM correct GROUP BY subjectid) x RIGHT JOIN (SELECT subjectID,COUNT(*) AS nerror FROM error GROUP BY subjectid) y ON x.subjectid=y.subjectid
Synes godt om
Slettet bruger
22. december 2008 - 10:33#4
Ja det virker.
Men hvordan er det smartest at gøre med SELECT subjectid, subjectID er ambiguous, men hvis man bruger x.subjectID kan der være tilfælde hvor den ikke findes og det samme med y.subjectID. Er det fint at bruge IFNULL(x.subjectid,y.subjectid) ?
Synes godt om
Slettet bruger
22. december 2008 - 11:38#5
Glem det sidste jeg skrev, har luret den :)
En sidste ting: Er der nogen mulighed for at lave en OUTER join efter den er blevet fjernet?
og smid venligst et svar.
Synes godt om
Slettet bruger
22. december 2008 - 13:04#6
Fandt ud af det så jeg ikke behøver at bruge outer join.
Mit sidste problem er bare jeg køre MySql 5.0 lokalt, men på serveren køre den 4.0 og der melder den fejl. Synes ellers ikke der er noget som ikke skulle kunne køre i 4.0.
Mit query endte med er se således ud:
SELECT y.subjectid,tss.partSubject,weighting, IFNULL(nerror,0)*100/(IFNULL(ncorrect,0)+nerror) AS result, IF(y.subjectID is null, 1,0) AS orderby FROM subjectweighting tss LEFT JOIN (SELECT subjectID,COUNT(*) AS ncorrect FROM correct_partsubject GROUP BY subjectID) AS x ON tss.subjectid = x.subjectid LEFT JOIN (SELECT subjectID,COUNT(*) as nerror FROM errors_partsubject GROUP BY subjectID) AS y ON tss.subjectid = y.subjectid ORDER BY orderby DESC, weighting DESC;
Jeg vil anbefale at lave et dump og restore fremfor at forsoege at opgradere tabeller. Saa er det nemt at forsoege flere gange hvis der er noget som driller.
Hvis der er noget som driller saa er det sandsynligvis charset. MySQL har forbedret deres support af forskellige charsets of collationer meget siden 4.0.
Synes godt om
Slettet bruger
22. december 2008 - 17:46#12
ok, tak.
Synes godt om
Ny brugerNybegynder
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.