GroupBy и где условие NOT IN не работает одновременно - PullRequest
0 голосов
/ 19 июня 2019

Здравствуйте. Я пытаюсь получить результаты из базы данных на основе расстояния, а также не хочу включать те строки, в которых определенные идентификаторы существуют в моих возвращаемых данных. Но проблема в том, что если я сделаю группу к тому времени, то она игнорирует условие WHERE

Вот мой запрос

SELECT ( 3959 * ACOS( COS( RADIANS(31.45583995) ) * COS( RADIANS( Room.lat ) )
                    * COS( RADIANS(Room.long) - RADIANS(73.12997248)) + SIN(RADIANS(31.45583995))
                    * SIN( RADIANS(Room.lat)))) AS distance, 
       `Room`.*, `User`.*, `Room`.`id` 
FROM `bring_messenger`.`room` AS `Room` 
LEFT JOIN `bring_messenger`.`user` AS `User` ON (`Room`.`user_id` = `User`.`id`) 
JOIN `bring_messenger`.`room_member` AS `RoomMember` ON (`RoomMember`.`room_id` = `Room`.`id`)   
WHERE ((`Room`.`user_id` NOT IN (2)) OR (`RoomMember`.`member_id` NOT IN (2)))  
GROUP BY distance 
HAVING distance < 100  
ORDER BY `distance` ASC

Проблема в том, что он дает мне данные, которые включают user_id = 2. Но если я удаляю условие GROUP BY, то условие работает успешно.

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

1 Ответ

0 голосов
/ 19 июня 2019

Группировка по используется вместе с Совокупными функциями , такими как SUM, AVG, MAX, MIN и COUNT. И вам нужно будет включить полную группу столбцов, упомянутых в операторе Select, за исключением одного (обычно столбец, являющийся результатом агрегатной функции). Одно и то же значение расстояния может существовать для разных комбинаций Room & Users, что может ввести в заблуждение SQL, из которого одна из данных Room & User будет извлечена для одного конкретного значения Distance. Группировать по примеру:

SELECT 
c1, c2,..., cn, aggregate_function(ci)
FROM
table
WHERE
where_conditions
GROUP BY c1 , c2,...,cn;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...