asseroin
Cadet 4th Year
- Registriert
- März 2008
- Beiträge
- 79
Hallo Leute,
leider bin ich kein SQL Guru , bräuchte dennoch eine speziellere Anfrage um ein gewisses Problem zu lösen. Hoffentlich kann mir jemand behilflich sein.
Im Moment habe ich unter anderem eine Tabelle "cibr" mit folgenden Columns:
da sieht eine Line z.b. so aus
Nun folgendes Problem:
Nun benötige ich eine Anfrage, bei der ich als Ausgabe format, kompression, avg_matching bekomme (wobei format einfach weggelassen werden kann).
Wobei avg_matching wie folgt definiert werden kann:
* für jedes sourcefile suche ich die Top 10 hitscores wobei : sourcefile != targetfile, klassensource == klassentarget
* Dann brauche ich den Mittelwert der Top 10 hitscores
Somit hätte ich dann für ein sourcefile das avg_matching der Top 10 matches
da stell ich mir z.b. sowas vor:
nun brauche ich das für alle sourcefiles damit ich am Ende folgendes habe:
mein erfolgloser Versuch war folgender:
Ausgabe ist folgende:
ABER die avg ist einfach zu niedrig. Die Top 10 sind im Wertebereich von mindestens 50 bis zu 99. von daher muss an der Anfrage einfach etwas falsch sein. Wobei ich nicht weiss, ob die Anfrage auch das tut, was sie tun sollte.
Ich danke schon Mal im Voraus für jegliche Antworten!
leider bin ich kein SQL Guru , bräuchte dennoch eine speziellere Anfrage um ein gewisses Problem zu lösen. Hoffentlich kann mir jemand behilflich sein.
Im Moment habe ich unter anderem eine Tabelle "cibr" mit folgenden Columns:
Code:
Create TABLE cibr
(
hitscore real,
sourcefile caracter varying(50) NOT NULL,
klassensource integer,
targetfile caracter varying(50) NOT NULL,
klassentarget integer,
format caracter varying(4) NOT NULL,
kompression integer NOT NULL,
CONSTAINT cbir_pkey PRIMATY KEY (sourcefile, targetfile, format, kopression)
)
da sieht eine Line z.b. so aus
Code:
85.6803207 file1.jpg 1 file2.jpg 1 jpg 60
Nun benötige ich eine Anfrage, bei der ich als Ausgabe format, kompression, avg_matching bekomme (wobei format einfach weggelassen werden kann).
Wobei avg_matching wie folgt definiert werden kann:
* für jedes sourcefile suche ich die Top 10 hitscores wobei : sourcefile != targetfile, klassensource == klassentarget
* Dann brauche ich den Mittelwert der Top 10 hitscores
Somit hätte ich dann für ein sourcefile das avg_matching der Top 10 matches
da stell ich mir z.b. sowas vor:
Code:
avg_matching sourcefile format kompression
66.5 file1.jpg jpg 60
nun brauche ich das für alle sourcefiles damit ich am Ende folgendes habe:
Code:
avg_matching format kompression
45.4 jpg 60
mein erfolgloser Versuch war folgender:
Code:
select a.format, a.kompression, avg(a.erkennungsrate) from
(
select sourcefile,format, kompression,
count(*)*10 as erkennungsrate from v_cbir where rownum <=10 and klassesource = klassetarget
group by sourcefile, format, kompression
) a group by format, kompression
Ausgabe ist folgende:
Code:
"format";"kompression";"avg"
"jxr";60;20.0649350649350649
"jp2";60;19.8061389337641357
"jpg";60;19.4830371567043619
"jxr";20;20.3114754098360656
"jxr";40;20.6446280991735537
"jp2";80;19.8861788617886179
"jpg";80;19.0865384615384615
"jpg";40;20.4383116883116883
"jpg";20;21.0576923076923077
"jxr";80;20.4508856682769726
"jp2";40;20.3908794788273616
"jp2";20;21.2052117263843648
ABER die avg ist einfach zu niedrig. Die Top 10 sind im Wertebereich von mindestens 50 bis zu 99. von daher muss an der Anfrage einfach etwas falsch sein. Wobei ich nicht weiss, ob die Anfrage auch das tut, was sie tun sollte.
Ich danke schon Mal im Voraus für jegliche Antworten!