2016-11-10 4 views
0

Я пытаюсь отфильтровать все положительные средние с помощью линииSQL сравнение сред не ведет себя, как и ожидалось

HAVING AVG(blurt_analysis.sentiment) < 0 

однако для неожиданной причине эта линия не делает, как и ожидалось, и на самом деле делает мой запрос не возвращать ничего, и им с трудом выяснить, почему мой запрос выглядит

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 

возвращение выглядит это без имеющей линии и слили с линией

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 

с первым столбцом, TopicID второго описания существ темы третьим местом существа ляпнуть 4-й является числом проговаривается и 5-го будет Avg настроения (то, что им пытаются фильтровать положительные числа от)

UPDATE Я до сих пор не удалось выяснить, почему запрос не работает с необходимостью, но мне удалось отфильтровать положительные числа с другим оных сделать мой SQL выглядеть

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

Не могли бы вы переписать свой запрос с помощью синтаксиса 'JOIN'? Маловероятно, что он решит вашу проблему, но мы можем лучше понять, что происходит в вашем запросе. –

+0

Я могу попробовать, но я новичок в SQL и на самом деле не написал запрос с присоединением до –

+0

И лучше всего, если вы создадите небольшие образцы данных, которые могут воспроизвести вашу проблему. –

ответ

0

пытались ли вы с NVL или ДЕЛУ заменить нулевые значения? Он работал для меня один раз.

т.е .: AVG(NVL(blurt_analysis.sentiment,0))

+0

пытается использовать AVG (NVL (blurt_analysis.sentiment, 0)) <0; дал мне ошибку VNL не exsist –

0

Вам повезло; теперь вам не повезло. каждый неагрегатный столбец в предложении select должен появиться в group by. Быстрый взгляд показывает, что topic.description среди недостающих.

Видимо, MySQL терпел ваш первоначальный запрос, но упал, когда вы добавили HAVING. Или вы получаете недетерминированные результаты; Я не знаю. Но я уверен, что если вы исправите свой запрос, ваше предложение HAVING будет вести себя лучше. :-)

+0

Я добавил это группе, сделав ее группой по blurt.location, topic.id, topic.description и это не изменило поведение моего HAVING –

+0

'topic.description', вероятно, функциональность зависит от 'topic.id'. Таким образом, набор результатов хорошо определен. –

+0

@PaulSpiegel означает, что его не нужно включать в конце концов? включая его или оставив его, вообще не изменилось ни на запрос, ни на сломанную строку HAVING –