gpt4 book ai didi

mysql - 在 mysql 语句中使用 ORDER BY 并对结果进行分组

转载 作者:行者123 更新时间:2023-11-29 06:58:32 26 4
gpt4 key购买 nike

我正在对一组用户进行查询,返回特定半径内的用户。用户属于 3 种不同类型的用户组中的一种。我需要通过显示第 1 组的用户(按距离排序)然后显示第 2 组和第 3 组的用户组合(按距离排序)来对返回列表进行排序。我可以轻松地使用 ORDER BY 子句,但我不知道如何确保第 2 组和第 3 组在结果中组合在一起。

这是首先按组 1、然后是 2、然后是 3 返回用户并按这些组内的距离排序的语句。我需要返回第 1 组,然后返回 2 和 3,按距离排序。

另外我不确定我是否正确使用了 INNER JOIN,这应该是 LEFT JOIN 吗?

SELECT
SQL_CALC_FOUND_ROWS
a.*,
b.group_id,
ROUND(( 3959 * acos( cos( radians( $lat ) ) * cos( radians( a.latitude ) ) * cos( radians( a.longitude ) - radians( $lon ) ) + sin( radians( $lat ) ) * sin( radians( a.latitude ) ) ) ), 1) AS distance
FROM `users` AS a
INNER JOIN `user_group_map` AS b
ON a.`id` = b.`user_id`
HAVING distance <= $radius
ORDER BY
b.`group_id` DESC,
distance ASC

最佳答案

您可以使用 ORDER BY CASE 有条件地首先应用顺序强制组 1。我认为这应该可以完成工作:

ORDER BY
CASE WHEN b.group_id = 1 THEN 0 ELSE 1 END,
distance ASC

CASE 语句为 group_id = 1 返回 0,为 group_id 的任何其他值返回 1。 0 排在 1 之前,然后这两个子组(0 和 1)按 distance ASC 进行子排序,因此 group_id 2 和 3 一起排序。

关于mysql - 在 mysql 语句中使用 ORDER BY 并对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11330971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com