Wer kennt sich mit SQL aus, wieso kommt hier eine Fehlermeldung?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

tripduration bezieht sich auf eine einzelne Zeile der Datenbank, nicht auf das Aggregat durch die Gruppierung. Vielleicht solltest du SUM(tripduration) oder so machen.

Woher ich das weiß:Hobby – Hobby seit meiner Jugend
Nichtsnutz12 
Fragesteller
 07.05.2022, 07:04

Check ich net was du meinst

0
ShimaG  07.05.2022, 10:18
@Nichtsnutz12

Group generiert dann in anderen Spalten eine Menge von Werten, nicht nur einen einzigen Wert. Mit der Gesamtheit dieser Werte musst du was machen - Summe, Durchschnitt oder sowas. Aktuell versuchst du, mit einem einzigen Wert der Menge an Werten was zu machen, und dann kapiert das SQL natürlich nicht.

1
TechPech1984  07.05.2022, 14:15
@ShimaG

ach sql interressiert das nicht in jeder datenbank , meist wird einfach die erste zeile genommen . :)

1
Nichtsnutz12 
Fragesteller
 07.05.2022, 14:22
@ShimaG

Wie lautet dann die Lösung zur Aufgabe? Dort steht ja explizit gruppiere nach usertype. Wenn ich jetzt noch nach teipduration gruppiere mach ich ja sicher was falsch…

0
ShimaG  07.05.2022, 17:20
@Nichtsnutz12

In der Aufgabe steht auch was von "SUMME der Tripdauer" - die wirst du wohl dann vom dem DBMS berechnen lassen müssen.

1
YBCO123  07.05.2022, 07:06

Was sollte SQL mit einer aggregierten TRIPDURATION machen?

1

Gefällt mir, bei welchem Anbieter bist Du?

Sollte zwischen Mitte und oben liegen.

Oder irgentwo in deiner Datenbank an sich.

Von Experten iQa1x und TheFamousSpy bestätigt

Du darfst bei einem GROUP BY oben im SELECT keine Spalten einfach so benutzen. Entweder müssen sie Teil der Gruppierung sein oder du musst eine Aggregats-Funktion anwenden. So ist nicht klar, welche Zeile genommen werden soll.

Wenn ich nach usertype gruppiere, welche tripduration soll ich denn nehmen, wenn es unter usertype mehrere gibt? Die Gruppierung sagt, dass pro usertype nur eine Zeile da sein darf aber im Zweifel gibt es unter einem usertype mehrere tripdurations.

Ergo musst du entweder auch nach der tripduration gruppieren, was du in dem Beispiel vermutlich nicht möchtest oder du musst eine Aggregrats-Funktion anwenden wie MIN, MAX, SUM, AVG etc. In deinem Fall wohl SUM.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012
Nichtsnutz12 
Fragesteller
 07.05.2022, 14:24

Asoo ok danke

0

Je nachdem was du machen willst kannst du entweder tripduration ins Group by aufnehmen:

Group by usertype, tripduration

Oder du nimmst alle Tripduration eines Usertypes für die Berechnung:

(Sum(Tripduration)/60*60*24)

Oder du nimmst den Durchschnitt:

(Average(Tripduration)/60*60*24)

Woher ich das weiß:Berufserfahrung – arbeite seit vielen Jahren in der IT
Nichtsnutz12 
Fragesteller
 07.05.2022, 14:02

Das ist sehr komisch

0
Nichtsnutz12 
Fragesteller
 07.05.2022, 14:21
@TheFamousSpy

Die Aufgabe sagt ja aus Gruppieren sie nach usertype. Punkt. Nichts mehr.

0
TheFamousSpy  07.05.2022, 14:51
@Nichtsnutz12

Ah, dass da eine Aufgabe in den Kommentaren steht hab ich gar nicht gesehen.

Aber da steht eh, dass du die Summe berechnen sollst, also nimmst du meinen zweiten Lösungsvorschlag und gruppierst eben nur nach usertype

1