PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Monate mit Anzahl der Bestellungen


Geldmann3
2013-01-28, 20:49:37
Hi, mit den ganz fundamentalen Befehlen von MySL kenne ich mich ja aus, aber wir schreiben morgen eine Arbeit dazu, die ein bisschen weiteres Verständnis verlangt :rolleyes:

Wir arbeiten wahrscheinlich mit der Nordwind Datenbank (http://www.schulserver.hessen.de/darmstadt/lichtenberg/SQLTutorial/nordwind.pdf), und sollen uns beispielsweise alle Monate des Jahres 1997, jeweils mit der Anzahl eingegangener Bestellungen auflisten lassen.

Kann mir jemand erklären, wie das geht?

Um darauf einzugehen, was ich schon kann.
Mit Lektion1 (http://www.schulserver.hessen.de/darmstadt/lichtenberg/SQLTutorial/home.html) werde ich schon problemlos fertig. :freak:

JAJA, bin voll der Noob. :wink:

ich würde mir ja alle Tutorien im Internet nochmal genüsslich zu Gemüte führen, wenn die Zeit bis morgen nicht etwas knapp wäre ;)
(Ich war krank, als das durchgenommen wurde und hab gerade erst bemerkt, wie weit meine Klassenkameraden gekommen sind MIIIIST)

Sollte aber ja auch nicht so schwer sein, das beispielsweise nach Monaten zu sortieren, wenn man weiss wie...

Matrix316
2013-01-28, 21:32:01
so ungefähr würde ich meinen

select count(Bestellnummer),MONTH(Bestelldatum) from Bestellung group by MONTH(Bestelldatum) where YEAR(Bestelldatum) = 1997


Frage wäre ob bei 12 bestellten Einheiten aus der Details Tabelle die Anzahl der Bestellungen 1 oder 12 sein soll?

Dann wäre es eher sowas


select count(b.Anzahl),MONTH(Bestelldatum) from Bestellung a inner join Bestelldetails b on a.Bestellnr = b.Bestellnr group by MONTH(a.Bestelldatum) where YEAR(s.Bestelldatum) = 1997


Alles auf eigene Gefahr testen. ;)

Geldmann3
2013-01-28, 22:36:29
Wir haben jetzt beispielsweise die Aufgabe: Lassen sie sich alle Orte auflisten, in denen Kunden wohnen und die Anzahl der dort wohnenden Kunden.

Ich würde schreiben

SELECT PLZ, Count(*) AS Anzahl
FROM Kunden
GROUP BY PLZ

stimmt das so?

Ich erinnere mich, dass wir im Unterricht PLZ beispielsweise in ' geschrieben hätten. Macht das einen Sinn?

samm
2013-01-28, 22:46:29
Wenn du's in ' schreibst, wird es ein String, d.h.

Select 'PLZ'...

würde dir einfach das Wort PLZ rausschreiben ;) MySQL bietet allerdings die eklige Möglichkeit, einen Akzent um `Feldnamen` herum zu verwenden (analog z.B. zu den [Klammern] beim SQL Server), was dazu dienen kann, Leerzeichen oder Kommata in Feldnamen oder Schlüsselwörter als Feldnamen zu verwenden.

Geldmann3
2013-01-28, 23:15:57
AHA, eine weitere Frage (http://www.schulserver.hessen.de/darmstadt/lichtenberg/SQLTutorial/main.php?uebung=4).


Welche Regionen haben eine Gesamtbevölkerung von mindestens 100 Millionen?

ich würde sie so lösen

SELECT Region, SUM(Einwohner) AS Gesamtbevolkerung
FROM cia
WHERE Gesamtbevölkerung > 1E08

die richtige Lösung ist aber

SELECT Region, SUM(Einwohner)
FROM cia
GROUP BY Region
HAVING SUM(Einwohner) > 1E08

Warum funktioniert meine Lösung nicht??

Hmmmm, wenn ich das richtig sehe, summiert es die Einwohner einer Region ohne das GROUP BY gar nicht....

Marscel
2013-01-29, 00:29:51
Hmmmm, wenn ich das richtig sehe, summiert es die Einwohner einer Region ohne das GROUP BY gar nicht....

Du solltest dir mal anschauen, was Gruppieren überhaupt bedeutet und wofür ein WHERE relevant ist im Unterschied zu einem HAVING.

Dann sollte sich die Frage klären.

Matrix316
2013-01-29, 11:01:44
AHA, eine weitere Frage (http://www.schulserver.hessen.de/darmstadt/lichtenberg/SQLTutorial/main.php?uebung=4).


Welche Regionen haben eine Gesamtbevölkerung von mindestens 100 Millionen?

ich würde sie so lösen

SELECT Region, SUM(Einwohner) AS Gesamtbevolkerung
FROM cia
WHERE Gesamtbevölkerung > 1E08

die richtige Lösung ist aber

SELECT Region, SUM(Einwohner)
FROM cia
GROUP BY Region
HAVING SUM(Einwohner) > 1E08

Warum funktioniert meine Lösung nicht??

Hmmmm, wenn ich das richtig sehe, summiert es die Einwohner einer Region ohne das GROUP BY gar nicht....
Bei deiner Abfrage geht das SUM glaube ich über alle Regionen. Kann es sein, dass es bei deiner Abfrage auch einen Fehler gibt von wegen Aggregatfunktion? Deswegen das group by.

aber man kann es auch anders schreiben:

select Region, (select sum(Einwohner) from cia where Region = a.Region) as Anzahl from cia a where (select sum(Einwohner) from cia where Region = a.Region) > 1E08

oder so. ;) Ist halt nur etwas umständlicher.

Geldmann3
2013-01-29, 20:13:31
Danke!!, hab heute eine Eins mit voller Punktzahl geschrieben, damit war ich sogar Klassenbester :cool: