gpt4 book ai didi

mysql - SQL : Two different queries to merge

转载 作者:行者123 更新时间:2023-11-29 05:32:14 25 4
gpt4 key购买 nike

我有这两个不同的查询。

此查询根据回复计数器从“posts”表中提取记录。此查询仅返回带有回复的帖子:

SELECT posts.title, posts.num, posts.status, COUNT( posts_replies.post_num)  AS count
FROM posts_replies
INNER JOIN posts ON ( posts_replies.post_num = posts.num )
WHERE posts.status = 1
AND posts.category='uncategorized'
GROUP BY posts.num

这是一个新查询,我想将其与上述查询合并以根据 gps 提取和排序记录。

SELECT num, title, ( 3959 * acos( cos( radians( 37 ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( -122 ) ) + sin( radians( 37 ) ) * sin( radians( lat ) ) ) ) AS distance
FROM posts
HAVING distance <75
ORDER BY distance

此查询使用纬度和经度列返回用户 75 英里半径范围内的记录。

我不是 sql 专家,不知道如何合并这两个查询以收集具有以下条件的结果:

  1. 只返回有回复的帖子
  2. 按距离排序
  3. 按回复数量排序

如有任何帮助,我们将不胜感激。

谢谢!

最佳答案

第二个查询中的 having 子句看起来不正确。在大多数 SQL 方言中,如果没有 group by 是不允许的。我忘记了 MySQL 是否隐式地将整个查询视为聚合(返回一行),或者 having 是否被转换为 where。在任何一种情况下,您都应该明确并在没有聚合时使用 where

您可以通过放入 where 子句来组合它们。我会用子查询来做,以使变量定义更清晰:

      SELECT p.title, p.num, p.status, p.distance,
COUNT( p_replies.post_num) AS count
FROM posts_replies pr INNER JOIN
(select p.*,
( 3959 * acos( cos( radians( 37 ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( -122 ) ) + sin( radians( 37 ) ) * sin( radians( lat ) ) ) ) AS distance
from posts p
) p
ON pr.post_num = p.num
WHERE p.status = 1 AND
p.category='uncategorized' and
distance < 75
GROUP BY p.num
order by distance

关于mysql - SQL : Two different queries to merge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788961/

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