我有这段代码:
"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是否会运行两次?
编辑:对于运行两次,我的意思是,如果它访问表两次
最诚挚的问候, 达里奥
答案 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的总数。所以,计数运行两次,但是该行未被多次处理。