Ähnliche Datensätze vereinigen

fischkrampf

Mitglied
Hallo miteinander,

ich habe folgendes Problem. Ich habe ähnliche Datensätze in meiner Datenbank. Da gibt es z.b.: rz.uni-hamburg.de und sub.uni-hamburg.de. Jedem dieser Datensätze ist eine Ganzzahl zugeordnet. Desweiteren gibt es mehrere Unis.

Hier zur Verdeutlichung noch ein Auszug der DB:
rz.uni-hamburg.de 5000
sub.max.uni-hamburg.de 1000
ksi.uni-berlin.de 800


Ich hätte gerne eine Ausgabezeile pro Uni mit der Gesamtsumme aller Treffer die diese Uni hat.

Im Internet habe ich leider keine Hilfestellung gefunden. Mag daran liegen dass ich nach dem falschen gesucht habe :).

Irgendwelche Vorschläge?

Gruß
 
Welches DBMS nutzt du?

Je nachdem wird die Antwort ausfallen.

In Mysql gibt es zum Beispiel instr(). Mit dieser Funktion könntest du die Third-Level-Domain abschneiden und weitermachen.

In Informix hättest du's schwerer. Da müssest du unter Umständen mit mehreren Replace-Funktionen arbeiten.

Und in Access ist sowieso alles anders :-)

Und nebenbei bemerkt - Ein Normalform-Fanatiker könnte jetzt raten, die URL-Bestandteile in einzelne Spalten aufzutrennen :-)
 
danke für die schnelle Antwort.

Mein DBMS ist Access. Ich dachte dass die Schnittstelle von allen SQL basierten DBMS gleich ist, aber hätte mir eigentlich auch denken können dass MS seine persönliche Note mit einbaut.. :rolleyes:

Wenn ich, nach deinem Rat, die URL in TLD und Subdomain trennen möchte, kann ich das m.E. nicht mit Access machen oder liege ich da falsch? Wenn es irgendwie möglich ist, hätte ich gerne eine reine Datenbanklösung für diese Abfrage.
 
Dann könntest du es mal so probieren:
SQL:
select
  substring(url from instr(url, ".") + 1),
  count(*)
from tabelle
group by 1
 
Ich vergaß, in Access gibt es kein substring, da heißt die Funktion entweder left, mid oder right :-)

SQL:
SELECT  
  right(url, length(url) - instr(url, ".")),  
  count(*)
FROM tabelleGROUP BY 1
 
Ich bin bisher soweit:
Code:
SELECT instr(Rechner, "uni-") AS Uni_Name_Start
  instr(Rechner, ".de") AS Uni_Name_End
   MID(Rechner,  Uni_Name_Start + 4,    Uni_Name_End) AS [Uni Name]
FROM [allhost 2007]
WHERE instr(Rechner, "uni-") <>  0;

Das bricht die URL auseinander und ich habe nur noch uni-hamburg usw. in [Uni Name] stehen.

Nun möchte ich die Unis gruppieren. Denk ich mir super einfach: Group By. Dann die Ernüchterung: Es kommt ein Fehler weil ich die selbst erstellten Felder hier nicht nutzen darf.

Idee? Ich habe da was von Subselect vorhin mal aufgeschnappt?
 
In Access musst du den ganzen Käse, den du gruppieren möchtest, dann nochmal hinschreiben. Deine Bezeichnungen kennt er nicht, group by spaltenziffer kennt er nicht, darum musst du ihm nochmal alle deine Formeln geben.
 
vllt steh ich aufm Schlauch, aber ich verstehe nicht ganz :)

Meinst du ich soll das Aggregat von oben nochmal unten ins Group BY reinschreiben?

[Edit] läuft...

Habe allerdings noch ein anderes Problem, melde mich vielleicht gleich wieder ;)
 
Zuletzt bearbeitet:
große Freude, ich habs geschafft!

Hier für die Nachwelt meine Lösung:

Code:
SELECT SUM(Seiten),
  MID(Rechner,  instr(Rechner, "uni-") + 4,
  instr(Rechner, ".de")) AS [Uni Name]
FROM [allhost 2007]
WHERE instr(Rechner, "uni-") <>  0
GROUP BY MID(Rechner,  instr(Rechner, "uni-") + 4,     instr(Rechner, ".de"));
 
Zurück