gpt4 book ai didi

mysql - 如何在单个 SQL 查询中搜索列中的值并获取列的计数

转载 作者:行者123 更新时间:2023-11-29 06:47:30 24 4
gpt4 key购买 nike

我在 MySQL 5.7 中有一个具有以下结构的表:

CREATE TABLE `post_like` (
`post_title_id` varchar(255) NOT NULL,
`user_name` varchar(50) NOT NULL,
PRIMARY KEY (`post_title_id`,`user_name`),
) ENGINE=InnoDB;

我有以下数据

post_title_id    user_name

new-story mani27
new-story manipal
some-story manipal

我正在尝试获取特定故事的点赞数,以及特定用户是否喜欢函数中的故事 likeStatus(user_name, post_title_id)

假设 likeStatus(mani27, new-story) 会导致:

count    status
2 1

我现在正在使用以下查询,它工作正常:

SELECT COUNT(user_name) AS count,
COUNT(CASE WHEN `user_name` = ? THEN 1 ELSE null END) as status
FROM post_like WHERE post_title_id = ?

但这会在表中的所有行上执行 case 函数,而不是搜索索引列 user_name。

我可以使用两个不同的查询来获取喜欢帖子的用户名的计数和状态,但这会花费比这更多的时间。那么,有没有一种优化的方法来获得这个输出?

最佳答案

我没有检查查询,但这应该会给您一个想法。尝试分组依据

SELECT COUNT(user_name) AS count,
COUNT(CASE WHEN `user_name` = ? THEN 1 ELSE null END) as status
FROM post_like GROUP BY post_title_id HAVING post_title_id=?

But this would execute the case function on all the rows in the table rather than searching the indexed column user_name

当您根据 post_title_id= 进行分组,然后对其应用计数函数时,用户名的行搜索数量可以减少到该组中的行

关于mysql - 如何在单个 SQL 查询中搜索列中的值并获取列的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48703759/

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