COUNT()运行两次吗?

时间:2016-08-29 07:59:34

标签: mysql sql

我有这段代码:

"SELECT post_id, COUNT(post_id) AS number_of_votes, (SUM(vote) / COUNT(post_id)) AS result
                                            FROM " . LOG_TABLE . " , $wpdb->posts AS p
                                            WHERE post_id = p.ID
                                            AND p.post_status = 'publish'
                                            GROUP BY post_id
                                            HAVING COUNT(post_id) >= 2
                                            ORDER BY result DESC, COUNT(post_id) DESC
                                            LIMIT 10
                                            "

我想知道第一行中使用的COUNT是否会运行两次?

编辑:对于运行两次,我的意思是,如果它访问表两次

最诚挚的问候, 达里奥

3 个答案:

答案 0 :(得分:2)

除非您使用以下形式的子查询,否则表格只会被访问一次(如果它是您的意思,将被访问两次),因此计数将只计算一次并在任何地方使用

select id,(select min(id) from table1 t2 where t1.id=t2.id)b
from
table1 t1

答案 1 :(得分:1)

是的,两个COUNT()将运行两次,但这并不意味着该行必须处理两次。对于数据的每一行,优化器将设置两个计数器和一个求和,如果使用1个或两个计数,则不应产生任何显着差异。

答案 2 :(得分:1)

是的,伯爵确实跑了两次。这就是到底发生了什么。 这部分代码COUNT(post_id) AS number_of_votes 计算发布ID的总数,代码(SUM(vote) / COUNT(post_id))的这一部分加上投票数,进一步除以发布ID的总数。所以,计数运行两次,但是该行未被多次处理。