sqlabfrage gesucht
bobf
- datenbank
-1 Mike©0 bobf0 Daniela Koller0 Rouven0 fk0 Daniela Koller0 fk
0 Eternius0 Ilja
Hallo,
oh mann ich hab bald meine prüfung zum systemintegrator und weiss sowas nicht =((((
hab ne mysql-tabelle in etwa so:
usr | etc
tim 42342134
jim 23412341
tim 3512345fgsdf
tim dfgdsfg
kim dfgadfg4351
kim rg4621
tim dfg4562
kim weg45624
jim gwr2456
jim 243652436
jim 435wrtzr
meine sql-abfrage die ich suche soll folgendes ergebnis bringen:
tim,jim,kim
nicht mehr und nicht weniger =)
ps: mir schwirtt der befehel "unique" im kopf rum....
bobf
Moin bobf,
ps: mir schwirtt der befehel "unique" im kopf rum....
und mir "GROUP BY"
regds
Mike©
Hi,
und mir "GROUP BY"
Danke!!!!!
Bis denne
Hi Mike
und mir "GROUP BY"
Nein! *schrei* Jedes vernünftige DBMS wird dir das um die Ohren schmeissen, völlig zurecht. Siehe auch: https://forum.selfhtml.org/?t=99147&m=605307 oder http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm
Gruss Daniela
Hi,
Nein! *schrei* Jedes vernünftige DBMS wird dir das um die Ohren
ähm, den verstehe ich nicht. Ich geb zwar zu, dass für diesen einfachen Zweck das GROUP BY nicht der optimale Ansprechpartner ist, sondern DISTINCT eleganter ist, aber:
Die Aufgabe: gib mir alle unterschiedlichen Werte in Spalte X aus kann ich durchaus mit einem GROUP BY X ausführen. Der von dir verlinkte Artikel beschreibt ja auch lediglich das Problem eine Spalte anzusprechen die nicht im GROUP BY enthalten ist, aber hier würde man ja durchaus auf dem Namen gruppieren, also kein Problem...
MfG
Rouven
und mir "GROUP BY"
Nein! *schrei* Jedes vernünftige DBMS wird dir das um die Ohren schmeissen, völlig zurecht. Siehe auch:
??????
die aufgabenstellung ist: gib mir alle user, auch wenn diese mehrere einträge haben. (gruppierung nach user)
SELECT usr FROM tabelle
GROUP_BY usr
liefert exakt das gewünschte ergebnis. und das völlig zu recht.
welches dbms meckert hier ????
ob möglicherweise aus performancegründen unübersichtlichere abfragen formuliert werden (unique, distinct ..), hängt von der optimierung des verwendeten dbms ab.
Hi fk
die aufgabenstellung ist: gib mir alle user, auch wenn diese mehrere einträge haben. (gruppierung nach user)
Nein, Unterdrückung aller doppelten Benutzer. Unter Gruppierung verstehe ich, das weitere Informationen über die Gruppe gewünscht werden.
SELECT usr FROM tabelle
GROUP_BY usrliefert exakt das gewünschte ergebnis. und das völlig zu recht.
Es ist imho einfach schlechter Stil und semantisch nicht korrekt.
welches dbms meckert hier ????
Ok, ich hatte mich verlesen, bei genau dieser Abfrage meckert keins.
Gruss Daniela
die aufgabenstellung ist: gib mir alle user, auch wenn diese mehrere einträge haben. (gruppierung nach user)
Nein, Unterdrückung aller doppelten Benutzer. Unter Gruppierung verstehe ich, das weitere Informationen über die Gruppe gewünscht werden.
das ist halt die frage der definition.
unterdrückung der doppelten wäre tatsächlich unique oder distinct.
aber was ist eine gruppe? welche information gehört zu einer gruppe?
meine antwort:
zu meiner kegelGRUPPE gehört karl, egon und otto.
welche information solls noch geben?
die GRUPPE in der aufgabenstellung ist USER.
SELECT usr FROM tabelle
GROUP_BY usrliefert exakt das gewünschte ergebnis. und das völlig zu recht.
Es ist imho einfach schlechter Stil und semantisch nicht korrekt.
der stil ist astrein und formulierungsmäßig 1a. (s.o.)
welches dbms meckert hier ????
Ok, ich hatte mich verlesen, bei genau dieser Abfrage meckert keins.
und was ist dann semantisch falsch?
Hi fk
das ist halt die frage der definition.
unterdrückung der doppelten wäre tatsächlich unique oder distinct.
aber was ist eine gruppe? welche information gehört zu einer gruppe?
meine antwort:
zu meiner kegelGRUPPE gehört karl, egon und otto.
Ja, in dem Fall würdest du aber über die Kegelgruppen gruppieren (also meine Gruppe, deine Gruppe...) und über irgend eine Agregatsfunktion (die es so im Regelfall nicht gibt, aber fürs Beispiel egal) eine Liste aus karl,egon und otto bekommen. Bei der Query
SELECT usr FROM tabelle
GROUP_BY usr
hättest du eine Gruppe karl, eine Gruppe Egon und eine Otto...
die GRUPPE in der aufgabenstellung ist USER.
Nein, es gibt in der Aufgabenstellung keine Gruppen.
der stil ist astrein und formulierungsmäßig 1a. (s.o.)
Nein (s.o.)
Gruss Daniela
Hi,
der stil ist astrein und formulierungsmäßig 1a. (s.o.)
Nein (s.o.)
ohne mich jetzt allzusehr erwaermen zu moechten fuer eine Syntax wie
SELECT
Kegler_Name
FROM
Kegler
GROUP BY
Kegler
, scheint doch alles OK zu sein.
Meine Online-Hilfe des M$ SQL Servers schmeisst folgendes dazu aus:
"
GROUP BY-Klausel
Legt die Gruppen fest, in denen Ausgabezeilen zusammengefasst werden, und berechnet, falls Aggregatfunktionen in der SELECT-Klausel <select list> enthalten sind, einen Summenwert für jede Gruppe. Wenn GROUP BY angegeben wird, muss jede Spalte jedes Nicht-Aggregatausdrucks in der Auswahlliste in der GROUP BY-Liste eingeschlossen sein, oder der GROUP BY-Ausdruck muss dem Auswahllistenausdruck genau entsprechen.
"
Also koennte
fk
ausnahmsweise mal recht haben. ;-)
Gruss,
Ludger
Hi Ludger
, scheint doch alles OK zu sein.
Das es keine Fehlermeldung gibt, haben wir bereits länger abgehackt.
Gruss Daniela
Hi,
, scheint doch alles OK zu sein.
Das es keine Fehlermeldung gibt, haben wir bereits länger abgehackt.
ich dachte wegen ideologischer Bedenken und so?
BTW - ich haette absolut nichts dagegen irgendwelche Bedenken der o.g. nun zur Kenntnis zu nehmen. (Die Argumentation von Klaus Mock, dass GROUP BY und Aggregatfunktionen irgendwie unbedingt zusammengehoeren, hat mich nicht hundertprozentig ueberzeugt.)
Gruss,
Ludger
yo,
Die Argumentation von Klaus Mock, dass GROUP BY und Aggregatfunktionen irgendwie unbedingt zusammengehoeren, hat mich nicht hundertprozentig ueberzeugt.
nun, du müsstest nur eine sinnvolle anwendung mit group by aufzeigen, die keine aggregat-funktionen benutzt.
Ilja
Hi,
Die Argumentation von Klaus Mock, dass GROUP BY und Aggregatfunktionen irgendwie unbedingt zusammengehoeren, hat mich nicht hundertprozentig ueberzeugt.
nun, du müsstest nur eine sinnvolle anwendung mit group by aufzeigen, die keine aggregat-funktionen benutzt.
das hatte ich etwas weiter oben schon versucht:
SELECT
Kegler_Name
FROM
Kegler
GROUP BY
Kegler_Name
Und sag bitte nicht, nur
SELECT
Kegler_Name,
COUNT(*)
FROM
Kegler
GROUP BY
Kegler_Name
ist sinnvoll.
;-)
Gruss,
Ludger
yo,
SELECT
Kegler_Name
FROM
Kegler
GROUP BY
Kegler_Name
das würde man auch locker mit DISTINCT lösen können und insofern bringt dir hier die gruppierung keinen zusätzlichen nutzen. es solte schon eine anwendung sein, die ein group by erfordert oder vorteile gegenüber anderen lösungen bringt.
Ilja
Hi,
SELECT
Kegler_Name
FROM
Kegler
GROUP BY
Kegler_Namedas würde man auch locker mit DISTINCT lösen können und insofern bringt dir hier die gruppierung keinen zusätzlichen nutzen. es solte schon eine anwendung sein, die ein group by erfordert oder vorteile gegenüber anderen lösungen bringt.
es gibt also keine begruendeten ideologischen (oder andere) Einwaende gegen GROUP BY ? Oder ist der Einwand "das es auch nur mit DISTINCT geht" fuer Dich ausreichend?
(Ich bearbeite das Thema noch ein wenig, weil sich ja einige MVPs hier klar (und aus meiner Sicht bisher nicht hinreichend begruendet) gegen die Verwendung von GROUP BY wie im o.g. Kontext, also ohne Aggregatfunktionen, ausgesprochen haben.)
Gruss,
Ludger
man muß sich mal von der computerei lösen:
zu meiner kegelGRUPPE gehört karl, egon und otto.
zu meiner wanderGRUPPE gehört heinz, willi und egon.
ich habe hier bereits GRUPPEN gebildet. es ist nicht mein ziel, subgruppen aus meinen gruppen zu bekommen.
die frage welche sich aufwirft ist, wer sind die mitglieder meiner gruppe. in der tat ist die gruppe bereits gebildet.
um nun die ausprägungen der mitglieder meiner gruppe zu bekommen, steht mir eine information zur verfügung, in welcher meine mitglieder mehrfach in verschiedenem kontext erwähnt sind. (besagte tabelle)
wie würde nun ein qualifizierter beamter vorgehen?
man kann die tabelle als einen karteikasten betrachten.
man nimmt aus diesem karteikasten immer die oberste kartei und schaut was darauf steht.
nun kann man sich für 2 möglichkeiten entscheiden:
1. ich schreibe den namen von der kartei ab auf meinen spickzettel. ist der name schon da, ignoriere ich diesen (unique oder distinct).
2. wenn ich nun aber nix zu schreiben habe (kein stift und kein spickzettel - kann ich mir nicht leisten), muß ich irgendwie anders vorgehen. dazu lege ich die genommene karteikarte auf den tisch. sollte dort bereits eine karteikarte mit dem namen liegen, lege ich die genommene einfach darauf. so bekomme ich letztlich so viele stapel wie es verschiedene namen gibt (group by).
welchen weg geht der beamte ???
und was ist an 1. oder 2. falsch ???
Hallo,
ich glaube, da war mal "select distinct usr from tabelle" o.ä.
gruss
yo,
meine sql-abfrage die ich suche soll folgendes ergebnis bringen:
tim,jim,kim
nicht mehr und nicht weniger =)
nun, dein problem ist nicht ganz eindeutig geschildert und lassen zwei lösungen zu. die eine ist hier schon genannt worden und geht mit der Klausel DISTINCT. die andere lösung wäre der IN operator im zusammenhang mit DISTINCT, falls du wirklich nur diese drei namen haben willst und keine anderen, selbst wenn neue datensätze mit anderen namen hinzugefügt werden. die zweite lösung würden dann so aussehen.
SELECT DISTINCT usr
FROM tabellenname
WHERE usr IN ('tim', 'jim', 'kim')
Ilja