gpt4 book ai didi

sql - 重写此 sql 查询

转载 作者:行者123 更新时间:2023-12-04 13:53:15 24 4
gpt4 key购买 nike

我编写了一个获取未读消息的 SQL 查询,但我认为我可以改进代码(速度和可读性)。第一个 select 用于 COUNT 函数,第二个用于根据 conversation_id 对消息进行分组,最后一个嵌套 select 用于选择最后一条消息。

请给我建议。提前致谢。

SELECT COUNT(*) as unreaded FROM ( 
SELECT id
FROM (
SELECT id, conversation_id
FROM messages
WHERE to_id = ?
AND readed = 0
and NOT hide_from = ?
ORDER BY sended DESC
) AS temp_messages
GROUP BY conversation_id
) as temp_messages2

最佳答案

按原样查询将不起作用 - 您需要在 GROUP BY 中定义所有未包含在聚合中的列。

不清楚,但如果你想计算唯一对话的数量,请使用:

SELECT COUNT(DISTINCT m.conversation_id) AS unread
FROM MESSAGES m
WHERE m.to_id = ?
AND m.readed = 0
AND m.hide_from != ?

...否则,使用:

SELECT COUNT(*) AS unread
FROM MESSAGES m
WHERE m.to_id = ?
AND m.readed = 0
AND m.hide_from != ?
  • 子查询是不必要的
  • ORDER BY 是一种资源浪费,因为它既没有在最终输出中使用,也没有使用 TOP
  • GROUP BY 将不起作用,因为 MESSAGES.id 不在列列表中

关于sql - 重写此 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129878/

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