2016-11-10 6 views
0

Ich versuche, diese Linie zu tun für einen unerwarteten GrundSQL avg Vergleich nicht wie erwartet verhalten

HAVING AVG(blurt_analysis.sentiment) < 0 

jedoch unter Verwendung der Linie alle positiven Mittelwerte herausgefiltert werden nicht wie erwartet und in der Tat macht meine Frage Rückkehr nichts und im eine harte Zeit, herauszufinden, warum meine Abfrage wie

SELECT topic.id,topic.description,blurt.location,count(blurt.blurtid)as 'number of blurts',AVG(blurt_analysis.sentiment) as avgSentiment 
FROM topic, blurt_analysis,blurt 
WHERE topic.id=blurt_analysis.topicid AND blurt.blurtid = blurt_analysis.blurtid AND blurt.email = blurt_analysis.email 
group by blurt.location,topic.id 
HAVING AVG(blurt_analysis.sentiment) < 0 

die Rückkehr wie dies ohne die mit Linie sieht aussieht und leer mit der Linie

1 shoes California 2 2.5000 
2 speaker California 3 1.3333 
3 bats California 3 1.0000 
4 hoodies California 2 -0.5000 
5 caps California 1 -2.0000 
6 pens California 2 0.0000 
7 games California 4 1.2500 
1 shoes Colarado 1 1.0000 
2 speaker Colarado 3 1.6667 
3 bats Colarado 1 1.0000 
5 caps Colarado 1 3.0000 
7 games Colarado 1 1.0000 

mit der ersten Spalte TopicID die zweiten Sein Thema Beschreibung ist die dritte Wesen blurt Lage der 4. die Anzahl der blurts und die fünften seinem avg Stimmung zu sein (was im Versuch von positiven Zahlen zu filtern)

UPDATE mich noch nicht, um herauszufinden, warum die Abfrage funktioniert nicht mit, die verwaltet, aber ich mit einem anderen Add machen meine sql aussehen wie

SELECT topic.id,topic.description,blurt.location,count(blurt.blurtid)as 'number of blurts',AVG(blurt_analysis.sentiment) as avgSentiment 
FROM topic, blurt_analysis,blurt 
WHERE topic.id=blurt_analysis.topicid AND blurt.blurtid = blurt_analysis.blurtid AND blurt.email = blurt_analysis.email AND blurt_analysis.sentiment <0 
group by blurt.location,topic.id,topic.description 
+0

Könnten Sie bitte Ihre Abfrage mit 'JOIN' Syntax umschreiben? Unwahrscheinlich, dass es Ihr Problem lösen wird, aber wir könnten besser verstehen, was in Ihrer Abfrage vor sich geht. –

+0

Ich kann versuchen, aber ich bin neu in SQL und habe nicht wirklich eine Abfrage geschrieben mit Join vor –

+0

Und am besten wäre, wenn Sie kleine Beispieldaten erstellen, die Ihr Problem reproduzieren können. –

Antwort

0

positive Zahlen filtern verwaltet haben Sie mit NVL oder CASE versucht, Nullwerte zu ersetzen? Es hat einmal für mich funktioniert.

d.h .: AVG(NVL(blurt_analysis.sentiment,0))

+0

versucht HAVING AVG (NVL (blunt_analysis.sentiment, 0)) <0; gab mir einen Fehler VNL existiert nicht –

0

Sie hatten Glück; Jetzt hast du Pech. Jede Nicht-Aggregatspalte in der select-Klausel muss in group by erscheinen. Ein kurzer Blick zeigt, dass topic.description zu den fehlenden gehört.

Anscheinend hat MySQL Ihre ursprüngliche Abfrage toleriert, ist aber beim Hinzufügen von HAVING umgefallen. Oder Sie erhalten nichtdeterministische Ergebnisse; Ich weiß es nicht. Aber ich wette, wenn Sie Ihre Anfrage korrigieren, wird Ihre HAVING-Klausel besser verhalten. :-)

+0

Ich fügte hinzu, dass die Gruppe von blurt.location, topic.id, topic.description und das änderte sich nicht das Verhalten meiner HABEN –

+0

'topic.description' ist wahrscheinlich Funktional abhängig von 'topic.id'. Somit ist die Ergebnismenge gut definiert. –

+0

@PaulSpiegel bedeutet, dass es nicht unbedingt aufgenommen werden muss? es einzuschließen oder es zu verlassen, hatte überhaupt keine Änderung an der Abfrage oder der unterbrochenen Zeile HAVING –

Verwandte Themen