MySQL COUNT() / SUM() bei Umkreissuche
Sandra
- datenbank
Schönen Tag,
ich möchte bei einer MySQL Abfrage eine bestimmte Spalte summieren.
Meine aktuelle Abfrage sieht wie folgt aus (Verbindung zur Datenbank besteht/vereinfachte Darstellung) und liefert mir 45 Datensätze:
SELECT `plz`,`pax`, (6368 * SQRT(2*(1-cos(RADIANS(breit)) *
cos(0.83267127885234) * (sin(RADIANS(lang)) *
sin(0.20519678936065) + cos(RADIANS(lang)) *
cos(0.20519678936065)) - sin(RADIANS(breit)) *
sin(0.83267127885234)))) AS distance
FROM TABELLE Having ((distance <= '10') or (distance <= 20 && `ort` = 'berlin'))
ORDER BY distance
Nun möchte ich die Spalte "pax" summieren. Die Spalte ist integer und kann auch nur Zahlen enthalten:
SELECT `plz`,`pax`, SUM(`pax`) Anzahl, (6368 * SQRT(2*(1-cos(RADIANS(breit)) *
cos(0.83267127885234) * (sin(RADIANS(lang)) *
sin(0.20519678936065) + cos(RADIANS(lang)) *
cos(0.20519678936065)) - sin(RADIANS(breit)) *
sin(0.83267127885234)))) AS distance
FROM TABELLE Having ((distance <= '10') or (distance <= 20 && `ort` = 'berlin'))
GROUP BY `pax` ORDER BY distance
Als Ergebnis erhalte ich keine Datensätze mehr (MySQL lieferte ein leeres Resultat zurück...).
Freue mich über einen Denkanstoss
Sandra
Nun möchte ich die Spalte "pax" summieren. Die Spalte ist integer und kann auch nur Zahlen enthalten:
SELECT
plz
,pax
, SUM(pax
) Anzahl, (6368 * SQRT(2*(1-cos(RADIANS(breit)) *
cos(0.83267127885234) * (sin(RADIANS(lang)) *
sin(0.20519678936065) + cos(RADIANS(lang)) *
cos(0.20519678936065)) - sin(RADIANS(breit)) *
sin(0.83267127885234)))) AS distance
FROM TABELLE Having ((distance <= '10') or (distance <= 20 &&ort
= 'berlin'))
GROUP BYpax
ORDER BY distance
SUM(`pax`) AS Anzahl
group by Anzahl
Danke für deine schnelle Antwort. Lieder bekomme ich einen MySQL Fehler:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY Anzahl...
Meine DB ist Version 5.5.35
Hi,
Nun möchte ich die Spalte "pax" summieren. Die Spalte ist integer und kann auch nur Zahlen enthalten:
SELECT
plz
,pax
, SUM(pax
) Anzahl, (6368 * SQRT(2*(1-cos(RADIANS(breit)) *
cos(0.83267127885234) * (sin(RADIANS(lang)) *
sin(0.20519678936065) + cos(RADIANS(lang)) *
cos(0.20519678936065)) - sin(RADIANS(breit)) *
sin(0.83267127885234)))) AS distance
FROM TABELLE Having ((distance <= '10') or (distance <= 20 &&ort
= 'berlin'))
GROUP BYpax
ORDER BY distance
> Als Ergebnis erhalte ich keine Datensätze mehr (MySQL lieferte ein leeres Resultat zurück...).
Die Reihenfolge der Klauseln ist falsch – HAVING kommt nach GROUP BY.
Und was noch falsch ist, ist dass du versuchst Spalten zu selektieren, die nicht Teil der Gruppierung sind. Das ist in SQL nicht erlaubt – und wird dir von MySQL je nach Einstellung entweder mit einem Fehler quitiert, oder aber stillschweigend ignoriert – wobei du dann aber in diesen Spalten einen \*zufälligen\* Wert aus allen Datensätzen der Gruppe bekommst.
Aber wenn du alle pax-Werte aufsummieren willst, dann brauchst du doch gar keine Gruppierung danach …?
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hallo Chris,
ich habe jetzt umgestellt und GROUP BY vor HAVING. Ergebnis: "MySQL lieferte ein leeres Resultat zurück". Gleiches gilt für "ohne GROUP BY".
Ich sitze den ganzen Tag an dieser Sache und komme keinen Schritt weiter.
Grüße
S.
Nun bin ich einen kleinen Schritt weiter.
SELECT `plz`,`pax`, SUM(IF(`pax` = 1, 1,0)) AS `anzahl`, (6368 * SQRT(2*(1-cos(RADIANS(breit)) *
cos(0.83267127885234) * (sin(RADIANS(lang)) *
sin(0.20519678936065) + cos(RADIANS(lang)) *
cos(0.20519678936065)) - sin(RADIANS(breit)) *
sin(0.83267127885234)))) AS `distance`
FROM TABELLE GROUP BY `plz` Having ((`distance` <= '10') or (`distance` <= '20' && `ort` = 'berlin'))
ORDER BY `distance`
Nun erhalte ich Summen, aber leider (natürlich) gruppiert. Ohne GROUP BY erhalte ich aber wieder keine Ergebnisse. Bitte um Hilfe.
Sa.
Ohne GROUP BY erhalte ich aber wieder keine Ergebnisse.
Natürlich nicht. Du verwendest SUM und das geht nur mit GROUP BY, du bekommst also einen Fehler.
Linuchs