2010-10-28 1 views
0

у меня есть что-то вроде этогоПроблема: предложения GROUP BY показывает результаты ранее отфильтровываются где положение

select A, B, C
from tableA
where A = '123'
group by B

и результаты включают в себя записи которых А не «123». Почему я не ожидал этого?

благодарит

база данных имеет 16k записи

фактический результат (7k записи): смесь записей с A = '123' и А = 'другое'

ожидаемые результаты (5k записей) : все записи с A = '123'

+2

Можете ли вы привести пример конкретных значений? Те, которые находятся в таблицах, те, которые возвращаются из запроса, и те, которые желательны. – Flinsch

+2

Как это возможно? Вы должны использовать некоторые совокупные функции для значений, которые не сгруппированы по следующим параметрам: 'SELECT aggregate (A), B, SUM (C) WHERE a = '123' GROUP BY B' –

+0

, пожалуйста, не могли бы вы опубликовать свой фактический код? Как бы то ни было, этот запрос может ** только ** возвращать A = 123 - если вы видите другие значения, ваш код должен существенно отличаться от указанного. –

ответ

1

Ваш запрос не будет работать, так как A и C не находятся внутри группы по условию. Для C вы должны использовать Min, Max, Avg, Count, ... агрегатные функции, в то время как для А вы можете использовать либо агрегатную функцию или diretly значение А что-то вроде:

Select Max(A) as A, B, Max(C) as C 
From Table 
Where A='123' 
Group by B 

Или

Select '123' as A, B, Max(C) as C 
From Table 
Where A='123' 
Group by B 
+0

или вы можете группировать A, B –