[lug-ld] lug-ld Nachrichtensammlung, Band 69, Eintrag 16

Alexander Ewert king-big-alex at web.de
Do Okt 2 12:54:22 CEST 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 28.09.2014 um 12:00 schrieb lug-ld-request at lists.lug-ld.de:
> Um e-Mails an die Liste lug-ld zu schicken, nutzen Sie bitte die 
> Adresse
> 
> lug-ld at lists.lug-ld.de
> 
> Um sich via Web von der Liste zu entfernen oder draufzusetzen:
> 
> http://lists.lug-ld.de/mailman/listinfo/lug-ld
> 
> oder, via Email, schicken Sie eine Email mit dem Wort 'help' in 
> Subject/Betreff oder im Text an
> 
> lug-ld-request at lists.lug-ld.de
> 
> Sie koennen den Listenverwalter dieser Liste unter der Adresse
> 
> lug-ld-owner at lists.lug-ld.de
> 
> erreichen
> 
> Wenn Sie antworten, bitte editieren Sie die Subject/Betreff auf
> einen sinnvollen Inhalt der spezifischer ist als "Re: Contents of
> lug-ld digest..."
> 
> 
> Meldungen des Tages:
> 
> 1. Re: SQL Frage (Ekki Plicht (DF4OR))
> 
> 
> ----------------------------------------------------------------------
>
>  Message: 1 Date: Sat, 27 Sep 2014 15:55:20 +0200 From: "Ekki
> Plicht (DF4OR)" <ekki at plicht.de> Subject: Re: [lug-ld] SQL Frage 
> To: Allgemeine Mailingliste der Linux-User-Group Landau 
> <lug-ld at lists.lug-ld.de> Message-ID: 
> <CAMmwEgMT--UR0Bwe9uLpQtnQ-+JRL4ETLk9AMnHzPHY3oXA4rw at mail.gmail.com>
>
> 
Content-Type: text/plain; charset="utf-8"
> 
> Hallo Christian, das ist sehr hilfreich, danke! Damit komme ich
> weiter.
> 
> Gruß & schönes Wochenende, Ekki
> 
> 
> 
> Am 25. September 2014 21:53 schrieb Christian Boltz
> <lug-ld at cboltz.de>:
> 
>> Hallo Ekki, hallo zusammen,
>> 
>> Am Dienstag, 23. September 2014 schrieb Ekki Plicht:
>>> Gegeben sei eine Tabelle mit Datum, Land, Umsatz. Durch eine
>>> simple Abfrage bekomme ich die Top 3 umsatzstärksten Länder
>>> über den gesamten Zeitraum raus:
>>> 
>>> http://sqlfiddle.com/#!2/789b8a/3/0
>>> 
>>> Das ist aber nicht das Ziel, vielmehr möchte ich haben: Eine
>>> Liste aller Top 3 Länder über die Zeit (je Monat), sortiert
>>> nach Monat, dann Umsatz.
>>> 
>>> Ich kann natürlich die Top 3 Länder auslesen und manuell in die
>>> WHERE clause einbauen, aber das ist ja langweilig. Die Top 3
>>> können sich ja auch mal ändern, darum soll das Resultat der
>>> ersten Abfrage (Wer sind die Top 3 heute?) als WHERE clause in
>>> die zweite Abfrage einfliessen.
>> 
>> Du willst also für die _heutigen_ Top 3 alle Daten der
>> Vormonate.
>> 
>> Das ist schonmal angenehmer als die Top 3 des jeweiligen Monats
>> ;-)
>> 
>>> Ich weiss das ich die erste Abfrage noch anpassen muss, damit
>>> pro Datensatz nur das Land zurückgeliefert wird.
>>> 
>>> Ich weiss das es sowas wie Subqueries gibt, habe damit aber
>>> noch nie so recht Erfolg gehabt. Oder ich bastele mir
>>> programmatisch eine WHERE land=? OR land=? or land=?
>>> Abfrage... Aber ich hätte gerne gelernt wie ich das nur mit SQL
>>> hinbekomme.
>> 
>> Ohne jetzt Deine genaue Query einzubauen:
>> 
>> SELECT x, y FROM table WHERE land IN (SELECT land FROM othertable
>> WHERE ...)
>> 
>> 
>> Im Ergebnis brauchst Du theoretisch sowas wie:
>> 
>> select `land`, sum(`umsatz`), month(`date`), year(`date`) FROM
>> `umsatz` WHERE `land` IN ( SELECT `land` FROM `umsatz` GROUP BY
>> `land` ORDER BY SUM(`umsatz`) DESC LIMIT 0,3 ) GROUP BY
>> month(`date`), year(`date`), `land`
>> 
>> Praktisch kommt allerdings folgendes Ergebnis bei sqlfiddle:
>> 
>> This version of MySQL doesn't yet support 'LIMIT &
>> IN/ALL/ANY/SOME subquery'
>> 
>> Nice[tm].
>> 
>> Du musst also die Query zur Ermittlung der Top 3 separat laufen
>> lassen und in der zweiten Query einbauen:
>> 
>> SELECT `land`, sum(`umsatz`), month(`date`), year(`date`) FROM
>> `umsatz` WHERE `land` IN ('AT', 'DE', 'NO') GROUP BY
>> month(`date`), year(`date`), `land`
>> 
>>> Bonus-Komplikation: Nun möchte ich eine Liste wie oben, also
>>> die Umsätze der Top3-Länder über die Monate, aber den Umsatz
>>> aller anderen Länder (Umsatzrang 4 bis unendlich)
>>> zusammengefasst als 'Rest_of_World' haben.
>>> 
>>> Geht das auch noch mit reinem SQL? Oder packe ich sowas lieber
>>> in eine SP? Oder mache das besser im umgebenden Programm (da
>>> ist es leicht).
>> 
>> WHERE land NOT IN ('foo', 'bar', 'baz')
>> 
>> 
>> Wenn man das alles zusammenbastelt, kommt man auf:
>> 
>> select `land`, sum(`umsatz`), month(`date`) monat, year(`date`)
>> jahr FROM `umsatz` WHERE `land` IN ('AT', 'DE', 'NO') GROUP BY
>> month(`date`), year(`date`), `land`
>> 
>> UNION
>> 
>> select 'zz_other' as `land`, sum(`umsatz`), month(`date`) monat, 
>> year(`date`) jahr FROM `umsatz` WHERE `land` NOT IN ('AT', 'DE',
>> 'NO') GROUP BY month(`date`), year(`date`)             <-----
>> nicht: `land`
>> 
>> ORDER BY `jahr`, `monat`, `land`
>> 
>> Das besteht zwar rein technisch aus zwei Queries ("UNION"), als
>> Ergebnis bekommst Du aber ein Ergebnis mit allen gewünschten
>> Daten.
>> 
>> 
>> Die Spalten-Aliase "monat" und "jahr" solltest Du verwenden, weil
>> Du ansonsten ein quasi unlesbares
>> 
>> ORDER BY 'month(`date`)', 'year(`date`)', `land`
>> 
>> brauchst - und wehe, Du hast irgendwo falsche Anführungszeichen
>> ;-)
>> 
>> 
>> Gruß
>> 
>> Christian Boltz --
>>>> MCSE: "Microsoft Certified Stupidity enclosed"  [A. Spengler
>>>> in dasr]
>>> Ich dachte das heißt: MCSE - Must Call Somebody Else
>>> [Markus Feilner in suse-linux]
>> Na Na Na!!! Ihr könnt doch nicht so einfach über so ein
>> Zertifikat herziehen! Das ist bestimmt der Neid der Besitzlosen!
>> Wenn ich hier an die Wand sehe (da hängt das bei mir), dann lese
>> ich ganz deutlich: Minsweeper Consultant and Solitaire Expert Und
>> darauf lege ich doch grossen Wert!!!! [Konrad Neitzel in
>> suse-linux]
>> 
>> _______________________________________________ lug-ld mailing
>> list lug-ld at lists.lug-ld.de 
>> http://lists.lug-ld.de/mailman/listinfo/lug-ld
>> 
> -------------- n?ster Teil -------------- Ein Dateianhang mit
> HTML-Daten wurde abgetrennt... URL:
> http://lists.lug-ld.de/mailman/private/lug-ld/attachments/20140927/347c85a0/attachment.html
> 
> 
> ------------------------------
> 
> _______________________________________________ lug-ld mailing
> list lug-ld at lists.lug-ld.de 
> http://lists.lug-ld.de/mailman/listinfo/lug-ld
> 
> 
> Ende lug-ld Nachrichtensammlung, Band 69, Eintrag 16 
> ****************************************************
> 
GEZ-Boykott

http://www.mmnews.de/index.php/politik/22393-aufruf-zum-deutschlandweiten-gez-boykott

Gruß Alex
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJULS7eAAoJEL+XgvMNDZCRIh8QAJ+Kq3yJHFjizDnxZJVGiKwG
c7/1fGmf+Ww3y1MI5KfmGZ2Vo7TZXnbceYTX2Gi/A95MNejdsAFVfjYrXOWBMtXE
qaImKX1q49shCSW9F83kls4PBxL1tl8lLRWGjy984Zp1eOqVylo3SGN3EaA44XD5
lNzMt878wqwpvUxYaT2HYKlFK7nqtn2kX1p7o0LifawjRa7bmZlOLBLnZ9t8zGJa
Udn1jkxj7PEMnClIbSXw74mLg2gh+CSHUs2KLCJvy6aGISW/yyO85WBGp5Dl1hCT
U/7CYaTLO3DGB+oi10d18M1vlpKBw4UaeKkwO7jN66tlkl+Cj7NG263KG6ER9+vb
DBsJnvXyfjJbOi28aDvZODVBRgqGqfFDn6+awHpz0QTxG0/fdFQm3Xg+SgzGSzdC
V4dzsIiyifH2aljr1JiZixW3nBV45NFtfMHGCQ7G3v2wFBVBMcSWe2HR4A0J5ki4
NkwNQ0BS020O/BuiALfwXvNG8i5nD6Sgs5r8dJoh5xOE+xjcUrrgOcLKCkluCQk7
rv1eSer2awEHytA6mnMv2tg/2ev5VDKgVRjS4BDYSzZHrkZAYzXB/jOgnj5jVRcA
Z4ukTvNlklEqIAkc/0jnY9e5zvn07cL+QcHRg5++ISvP1f2rFbb7BlJcapAHxjLi
1gRqICcFR49UlJEmg6OR
=XrrS
-----END PGP SIGNATURE-----