2016-08-29 6 views
1

Я этот код:Выполняет ли COUNT() два раза?

"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 используется в первой строке дважды баллотировался?

EDIT: для запуска в два раза, я имею в виду, если он Acces таблицу дважды

С наилучшими пожеланиями, Дарио

+0

Вы не можете проверить сами? – LBes

+0

@ LBes, как бы вы это испытали? – Strawberry

ответ

2

, если вы не используете подзапросы форму ниже, таблица будет доступен только один раз (если это то, что вы имели в виду по количеству, будут доступны два раза), поэтому рассчитывать будет рассчитываться только один раз и использовать везде

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

Это неправильно! Почему этот ответ получил одобрение? 'COUNT' будет вычисляться дважды, один раз за каждый раз его использование! – sagi

+1

@sagi: То, что вы говорите, правильно, я думаю, что пользователь имел в виду, если к нему дважды обращаются из таблицы. Это то, что я упомянул в своем ответе – TheGameiswar

1

Да, два COUNT() будет работать в два раза, но это не означает, что строка должна быть обрабатывается дважды. Для каждой строки данных оптимизатор будет устанавливать два счетчика и 1 суммирование, которые не должны иметь существенных отличий, если использовать 1 счет или два.

1

Да, счет выполняется в два раза. Действительно, что именно происходит. Эта часть кода COUNT(post_id) AS number_of_votes подсчитывает общее количество сообщений Id и этой части кода (SUM(vote)/COUNT(post_id)) складывается с голосами, которые далее делятся на общее количество сообщений id.s.So да, счетчик выполняется дважды, но строка не обрабатывается много раз.