bobf: sqlabfrage gesucht

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

  1. Moin bobf,

    ps: mir schwirtt der befehel "unique" im kopf rum....

    und mir "GROUP BY"

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Hi,

      und mir "GROUP BY"

      Danke!!!!!
      Bis denne

    2. 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

      1. 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

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      2. 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.

        1. 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 usr

          liefert 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

          1. 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 usr

            liefert 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?

            1. 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

              1. 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

                1. Hi Ludger

                  , scheint doch alles OK zu sein.

                  Das es keine Fehlermeldung gibt, haben wir bereits länger abgehackt.

                  Gruss Daniela

                  1. 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

                    1. 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

                      1. 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

                        1. 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

                          1. Hi,

                            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.

                            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

              2. 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 ???

  2. Hallo,

    ich glaube, da war mal "select distinct usr from tabelle" o.ä.

    gruss

    --
    no strict;
    no warnings;
    man google
  3. 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