您好,我试图根据距离从数据库中获取结果,并且也不想在返回数据中包含某些ID的行。但是问题是如果我按组进行分组,那么它将忽略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
条件,那么该条件将成功运行。
因此,请帮助我如何不包括某些行,并根据距离对结果进行排序。
答案 0 :(得分:0)
分组依据与聚合函数(例如SUM,AVG,MAX,MIN和COUNT)一起使用。 并且您将需要包括Select语句中提到的完整的一组列(通常是聚合函数的列结果)。对于“房间与用户”的不同组合,可能存在相同的距离值,这会使SQL混淆“房间与用户”数据中的哪一个要根据“距离”的一个特定值来获取。 按示例分组:
SELECT
c1, c2,..., cn, aggregate_function(ci)
FROM
table
WHERE
where_conditions
GROUP BY c1 , c2,...,cn;