Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) mysql group by order by (edit)
 
Reply to this topicStart new topicStart Poll
> [MySQL] Nach Gruppen sortieren
pat-b
Geschrieben am: Mi 8.11.2006, 19:06
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 63
Mitglied seit: 12.11.2005


Hallo

Ich habe eine Tabelle mit der Spalte "titel", welche mehrere gleiche Einträge hat. Nun möchte ich nach dieser gruppieren und nach der Anzahl gleicher Einträge sortieren.

Beispiel der Spalte:
  • auto
  • hund
  • katze
  • hund
  • katze
  • hund
Wie muss die MySQL-Abfrage aussehen, damit die Ausgabe so aussieht:
  • hund (3)
  • katze (2)
  • auto (1)
Vielen Dank schonmal für die Hilfe!
Patrick
Top
PMEmail PosterUsers Website
Top
 
 
Sascha Ahlers
#2 Geschrieben am: Mi 8.11.2006, 19:18 (+00:12)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1701
Mitglied seit: 27.12.2004


"group by" lautet der Filter zum gruppieren.

SQL
SELECT id, kuenstler FROM alben GROUP BY kuenstler;



Und um die Anzahl noch anzuzeigen müsste die Abfrage so lauten:

SQL
SELECT id, kuenster, COUNT(kuenstler) AS anzahl FROM alben GROUP BY kuenstler;




MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
pat-b
#3 Geschrieben am: Mi 8.11.2006, 19:25 (+00:06)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 63
Mitglied seit: 12.11.2005


Super, vielen Dank!

Gruss
Patrick
Top
PMEmail PosterUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#4 Geschrieben am: Mi 8.11.2006, 19:35 (+00:10)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2440
Mitglied seit: 4.02.2006


QUOTE (Sascha Ahlers @ Mi 8.11.2006, 19:18)
Und um die Anzahl noch anzuzeigen müsste die Abfrage so lauten:

SQL
SELECT id, kuenster, COUNT(kuenstler) AS anzahl FROM alben GROUP BY kuenstler;

Mach das mal und stell dann die Fehlermeldung rein. Dann kann ich das endlich mal in meinem Abschnitt über Group By ergänzen.

Bei Access würde eine Fehlermeldung kommen: "Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'id' nicht als Teil der Aggregatfunktion einschließt".

Sprich: Die Spalte id muß hier komplett raus. Wird über sie gruppiert, wäre das unsinnig, da das wohl der Primärschlüssel ist, also werden alle Zeilen zurückgegeben, Group By bleibt wirkungslos.

Abgesehen davon sind die Tabellen wohl nicht normalisiert - die 'Titel' sollte vom Typ Integer sein und eine Verknüpfung auf eine Randtabelle mit den eigentlichen Texten enthalten.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Sascha Ahlers
#5 Geschrieben am: Mi 8.11.2006, 19:50 (+00:14)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1701
Mitglied seit: 27.12.2004


QUOTE (jAuer @ Mi 8.11.2006, 20:35)
Mach das mal und stell dann die Fehlermeldung rein. Dann kann ich das endlich mal in meinem Abschnitt über Group By ergänzen.
[...]

CODE
mysql> select cat_id, cat_parent, COUNT(cat_parent) AS anzahl FROM link__cat GROUP BY cat_parent;
+--------+------------+--------+
| cat_id | cat_parent | anzahl |
+--------+------------+--------+
|      1 |          0 |      6 |
|      7 |          1 |      1 |
+--------+------------+--------+
2 rows in set (0.00 sec)


Klappt doch.

Gut man bekommt nur immer die ID des ersten gefundenen Eintrages und daraus können sich Logikfehler erschließen, aber im Prinzip funktioniert es. Von einer Fehlermeldung keine Spur.


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#6 Geschrieben am: Mi 8.11.2006, 20:02 (+00:12)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2440
Mitglied seit: 4.02.2006


QUOTE (Sascha Ahlers @ Mi 8.11.2006, 19:50)
Klappt doch.

Gut man bekommt nur immer die ID des ersten gefundenen Eintrages und daraus können sich Logikfehler erschließen, aber im Prinzip funktioniert es. Von einer Fehlermeldung keine Spur.

Oh! Das ist aber eine - negative - Überraschung.

Sowohl Access als auch der MS-SqlServer reagieren in so einem Fall sofort mit einer blockierenden Fehlermeldung, der Code wird bei der Analyse abgelehnt. Und ich vermute, daß das auch dem SQL-92-Standard entspricht.

Bei Group By muß jede Ausgabespalte entweder im Group-By-Abschnitt drin sein oder sie muß als Argument einer Aggregatfunktion weiterverarbeitet werden. Da das bei der obigen Spalte nicht der Fall ist, würde der Code so nicht funktionieren.

Und da der Wert dieser Spalte wohl nicht deterministisch ist, wäre so etwas auch keine gute Lösung.

@Irene: Was meint Oracle da?


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Irene
irene.ch
#7 Geschrieben am: Do 9.11.2006, 05:46 (+09:43)
Report PostQuote Post

AyomRank 7
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 1114
Mitglied seit: 3.05.2004


QUOTE (jAuer @ Mi 8.11.2006, 21:02)
@Irene: Was meint Oracle da?

Oracle meint: ORA-00979: not a GROUP BY expression.

(SQL war select empno, ename, count(deptno) from emp group by deptno wobei EMP eine Tabelle von Mitarbeitern ist und DEPTNO die ID der Abteilung).

Also genau das Verhalten, was auch Access und SQL Server zeigen. By MySQL können ja verschiedene Datenbank-Arten verwendet werden, soweit ich weiss. Eventuell handhaben das nicht alle diese Datenbank-Arten gleich?

Im übrigen müsste man, um solche SQL-Fragen richtig zu beantworten, die komplette Struktur der betreffenden Tabelle(n) inklusive der Primär- und Fremdschlüsselfelder kennen. Wer nur Feldnamen sieht, macht sich im Kopf ein Bild dieser Tabelle, so wie er diese Felder interpretiert, und das ist meistens nicht ganz richtig. Genauso "nicht ganz richtig" ist dann das SQL, was daraus resultiert ;-)

Im Falle von pat-b würde ich das SQL so formulieren:

CODE
select titel, count(titel) as anzahl from tabelle_mit_der_spalte_titel group by titel order by anzahl desc

Griessli
Irene


--------------------
Top
PMUsers Website
Top
 
Sascha Ahlers
#8 Geschrieben am: Do 9.11.2006, 15:28 (+09:42)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1701
Mitglied seit: 27.12.2004


QUOTE (Irene @ Do 9.11.2006, 6:46)
[...]
Also genau das Verhalten, was auch Access und SQL Server zeigen. By MySQL können ja verschiedene Datenbank-Arten verwendet werden, soweit ich weiss. Eventuell handhaben das nicht alle diese Datenbank-Arten gleich?
[...]

Kann sein, ich habe das auf eine MyISAM Tabelle angewandt, bei InnoDB könnte das ggf. anders aussehen.



PS: Man sollte jedoch vermeiden ein COUNT() auf eine InnoDB Tabelle anzuwenden...

Bearbeitet von Sascha Ahlers am Do 9.11.2006, 19:55


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/14944

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Lost connection to MySQL cr4m0 128 4 So 23.11.2008, 14:31
MySQL Frage G.P. 105 2 Mo 17.11.2008, 15:59
Suche Freelancer: Ajax, XML, PHP, MySQL omc 321 3 Mi 12.11.2008, 18:22
Einbinden vonn RSS feeds in Typo3 / MYSQL e-card 10981 5 Di 4.11.2008, 18:36
MySql Frage - ID Ändern EuD 122 2 Di 4.11.2008, 11:09
mysql query vereinfachen Big Rob 164 5 Mo 3.11.2008, 22:40
mysql Dump Städte pl_90 164 2 So 26.10.2008, 01:13
MySQL Befehl G.P. 174 5 Fr 24.10.2008, 15:58
[S] unique Textcontent (Synonym-Suche) nach eigene Martin.NewAd 97 0 Do 23.10.2008, 07:43
Paypal Weiterleitung nach Kauf A-Markets 228 6 Fr 17.10.2008, 02:03




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]