Die Mathe-Redaktion - 24.05.2013 18:36
Auswahl
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]

Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter April 2013

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 388 Gäste und 48 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matroid
Informatik » Datenbanken » SQL: group by
Druckversion
Druckversion
Antworten
Antworten
Autor
Kein bestimmter Bereich SQL: group by
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2012-08-19 04:40


Hallo zusammen,

ich habe gerade meinen Rechner mit einer DBMS bei meinem Bruder, kann deshalb nicht testen.  Eine Frage:

ID KundenID Beschreibung      Betrag
 
1  33       Ersatzgebühr      40
 
2  33       Mitgliederbeitrag 50
 
3  45       Mitgliederbeitrag 50
 
4  33       Mahngebühr        65
 
5  35       Kaution           20
 
6  59       Ersatzgebühr      40
 
7  45       Mahngebühr        80
 
8  45       Ersatzgebühr      40
 

Was würde mir SQL ausgeben bei dem Code?

SELECT KundenID, Beschreibung
FROM Kasseneinnahmen
GROUP BY KundenID;

Vielen Dank für die Hilfe.

Schöne Grüße aus Rheinland,

Eure Ratna



  Profil  Quote  Link auf diesen Beitrag Link
Buri
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 02.08.2003
Mitteilungen: 34706
Aus: Dresden
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2012-08-19 08:47


Hi hingiswiss,
soweit ich sehe, ist die GROUP BY-Klausel in diesem Beispiel wirkungslos oder unzulässig, weil keine Aggregatfunktionen vorkommen und weil alle Paare von (KundenID, Beschreibung) verschieden sind.
Microsoft Access liefert die Fehlermeldung

Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck "Beschreibung" nicht als Teil der Aggregatfunktion einschließt.

Anders wäre es, wenn zum Beispiel mehrere Datensätze "33 Mitgliedsbeitrag" vorkämen, oder wenn nach SELECT nur das Feld KundenID steht. Weitere Beispiele findest du hier.
Gruß Buri
[ Nachricht wurde editiert von Buri am 19.08.2012 09:33:59 ]



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2012-08-19 16:27


Hallo Buri,

danke für die Antwort.  

Soweit ich weiss, group by muss nicht immer mit einer Aggregationsfunktion in Beziehung gebracht werden.  Also:

SELECT KundenID
FROM Kasseneinnahmen
GROUP BY KundenID;

dann gibt der Code alle distinkten Kunden ID aus:

KundenID
 
33
 
45
 
35
 
59

Bei dem Code im ersten Beitrag:

SELECT KundenID, Beschreibung
FROM Kasseneinnahmen
GROUP BY KundenID;

hätte ich eigentlich gedacht, dass alle distinkten Zeilen ausgegeben werden.  Also, logisch müsste es ja so sein.

Jetzt stellt sich die Frage ob das DBMS-abhänging ist.  

Schöne Grüße aus Rheinland,

Eure Ratna
 



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 3813
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2012-08-19 17:38


Hallo,

Nehmen wir an, wir haben eine Tabelle t1:
id          kid         besch
----------------------------------------------
1           3           This is sample data #1
2           5           This is sample data #2
3           7           This is sample data #3
4           5           This is sample data #4
so lässt sich natürlich normalerweise mit:
select kid, besch from t1
dies:
3           This is sample data #1
5           This is sample data #2
7           This is sample data #3
5           This is sample data #4
mit:
select kid, besch from t1 group by kid
dies:
3           This is sample data #1
5           This is sample data #4
7           This is sample data #3
bzw. mit:
select kid from t1 group by kid
dies:
3
5
7
abfragen smile 

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei

[ Nachricht wurde editiert von matph am 19.08.2012 17:47:20 ]



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2012-08-19 18:34


Hallo mathph,

danke für deine Beispiele.  Das Beispiel mit folgendem Code macht mich ein wenig stutzig:

SELECT kid, besch FROM t1 GROUP BY kid

3           This is sample data #1
5           This is sample data #4
7           This is sample data #3

Was ist mit dem Value "This is sample data #2"  ?
Denn, "This is sample data #2" und "This is sample data #4" haben zwar beide den gleichen ID, aber sie sind nicht gleich.  Oder anders gefragt, woher weiss ich ob SQL #4 oder #2 bei Ausführung dieses Codes ausgibt?

Schöne Grüße aus Rheinland,

Eure Ratna



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 3813
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2012-08-19 19:10


Hallo,

Solange in der Referenz deines Systems nichts spezifisch angegeben wird, weißt du es gar nicht, doch es handelt sich ohnehin hier um eine fälschliche Verwendung von GROUP BY siehe auch Beitrag No.1.

Richtig ginge es so: smile 
SELECT DISTINCT kid, besch FROM t1
was zu:
3           This is sample data #1
5           This is sample data #2
7           This is sample data #3
5           This is sample data #4
führt, bzw:
SELECT DISTINCT kid FROM t1
mit dem Resultat:
3
5
7

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21589
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2012-08-19 20:36


Hi hingiswiss

Deshalb wird ja auch nach einer Aggregatfunktion verlangt. Z.B. können Preise addiert oder das Maximum gesucht werden oder … oder.

Aber was würdest du denn bei deinem Beispiel überhaupt erwarten?
Ok, manche der KundenID's sind mehrfach, nach denen kann aggregiert werden. Aber die unterschiedlichen Beschreibungen (bei gleicher K-Id), was soll damit passieren? Rechnen kann man damit nix. Man könnte die alphabetisch erste Beschreibung anfordern, aber macht das Sinn?

Wie gesagtgefragt: was würdest du denn als Output bei der Abfrage im Themenstart erwarten?

Oder, ganz anders gefragt:
Was willst du überhaupt erreichen?

Gruß vom ¼


-----------------
Bild



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2012-08-20 20:32


vielen Dank zusammen.

Schöne Grüße aus Rheinland,

Eure Ratna



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21589
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2012-08-20 21:26


Hä, was ist denn das für ein Abschluß?
Es kann dich ja niemand zwingen, deine Erkenntnisse hier kundzutun. Oder die gestellten Fragen zu beantworten.
Aber so einfach sang und klanglos die Tür zuknallen?
Keine feine Art confused 



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2012-08-20 21:39


ach ja, ganz vergessen, sorry:

der grund war ganz einfach und schlicht, da ich die Mechanik verstehen wollte, wie Group By arbeitet.  Bisher hab ich die Funktion Group By immer einfach so hingenommen, ohne groß darüber nachzudenken, was wie als erstes oder nächstes bei einer Group By anfrage ausgeführt wird.

Schöne Grüße aus Rheinland,

Eure Ratna  



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2012-08-20 21:41


Meine Erkenntnis nach diesem Thread ist jedenfalls:
man kann zwar viel mit group by experimentieren, aber ohne Aggregatsfunktion ist group by EIGENTLICH nicht sehr geeignet, eine Anfrage zu erstellen.

Desweiteren bin ich immer noch der Meinung, dass bei:

...
...
group by A, B, C;

alle DISTINKTE Zeilen von A, B und C genommen werden.



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21589
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2012-08-20 22:07


Davon will dich auch niemand abbringen wink 

Aber wenn es dir nur um die unterschiedlichen Werte-Kombinationen der Felder A, B und C geht, dann kannst du das auch so abfragen:
SQL
SELECT DISTINCT A,B,C
  FROM Tabelle

Wenn du aber wissen willst, wie oft jede vorkommt, dann z.B. so:
SQL
SELECT A, B, C, SUM(1) AS Zaehler
  FROM Tabelle
  GROUP BY A, B, C



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2012-08-20 22:39


so etwas geht nicht, oder?

SELECT A SUM(1) AS Zaehler
  FROM Tabelle
  GROUP BY A, B, C



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21589
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2012-08-20 23:24


Abgesehen davon, daß zwischen A und SUM ein Komma fehlt?

Gegenfrage:
Was sollte denn (deiner Meinung nach) dabei herauskommen?
Anders gefragt: welchen Sinn hätte so eine Abfrage?

Klär mich an diesem Beispiel auf:
Beispieltabelle
A B C
-+-+-
X Y Y
X Z Y
P Q R

Was soll die Abfrage
SQL
SELECT A, SUM(1) AS Zaehler 
  FROM Tabelle 
  GROUP BY A, B, C
liefern?



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2012-08-20 23:46


ich bin überfragt.. frown 



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 02.04.2005
Mitteilungen: 428
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, vom Themenstarter, eingetragen 2012-08-21 00:10


mhh.. von meiner logik her müsste es das hier rauskommen:

A Zähler
- ------
X weiss nicht, da nicht weiss was SUM(1) macht
X weiss nicht, da nicht weiss was SUM(1) macht
P weiss nicht, da nicht weiss was SUM(1) macht

Begründung:
GROUP BY A,B,C spezifiziert, dass alle 3 Zeilen ausgegeben werden, da alle 3 distink sind.  Je Zeile ist quasi eine eigene "Gruppe".  
Nun, dass bei der Projektion lediglich die Ausgabe der Spalte A erwünscht ist, beeinflusst die vorige group by-Ausgabe nicht.

Danke.

Schöne Grüße aus Rheinland,

Eure Ratna



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21589
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, eingetragen 2012-08-21 01:57


Ja, ist richtig.
Aber es bleibt die Frage nach dem Sinn einer solchen Query: nach mehreren Feldern gruppieren, aber nur eines davon für die Ausgabe selektieren.

SUM(1)
Die Tabelle hat eine vierte (Pseudo)Spalte, deren Wert immer 1 ist. Und nach dieser Spalte wird nicht gruppiert, sondern summiert. Dadurch werden die unterschiedlichen Zeilen (Gruppenrepräsentanten) gezählt.

Hast du denn kein DB-System zur Verfügung, um dir solche Fragen selbst zu beantworten, indem du einfach ausprobierst/experimentierst? Sowas kannst du auch mit einer Access-DB machen, dazu brauchst du kein ausgewachsenes DB2. Gut, alles geht damit auch nicht, aber bis du an diese Grenze stößt ist es sehr hilf- und lehrreich.



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 3813
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, eingetragen 2012-08-21 02:05


Hallo,

Oder ohne jegliche Installation mittels SQLite smile 

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
hingiswiss hat die Antworten auf ihre/seine Frage gesehen.
Bewerte diesen Thread:
[Was sonst bewertet wurde]
 Neues Thema [Neues Thema]

 Antworten [Antworten]   

 Druckversion [Druckversion]


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2013 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]