2013-03-04 3 views
0

Я хочу в основном взять число (total_score) и разделить его на число (release_date) s, которые являются < = сегодня. Я определенно хочу сделать математику в инструкции SELECT. Я попробовал это, но это не похоже на работу:MySQL: Рассчитать число, используя COUNT в инструкции SELECT?

SELECT 
total_score/COUNT(release_date <= CURDATE()) as final_score 
from movies 
WHERE id = 12 

Так сказать, общий балл 400, а число release_dates, которые < = сегодня 2. final_score должен выйти в 200.

Можно ли вычислить в инструкции SELECT, как это? COUNT(release_date <= CURDATE())

+0

Erm ... Я вижу, что вы делаете. Вам понадобится подзапрос. – crush

ответ

1

Может попробовать это один:

SELECT 
total_score/(SELECT COUNT(release_date) FROM movies where release_date <= CURDATE()) as final_score 
from movies 
WHERE id = 12 
+0

Это отлично поработало, спасибо! – ISOcrates

+0

не проблема, если это полезный ответ, возможно, вы можете принять его как правильный ответ, чтобы помочь другим пользователям. –

0

Может быть, попробовать что-то вроде этого: -

SELECT (total_score/score_count) as final_score 
FROM movies 
CROSS JOIN (SELECT COUNT(*) as score_count 
FROM movies 
WHERE release_date <= CURDATE()) AS Sub1 
WHERE id = 12 
0

Одна из причин, что не работает это вы только выбрать одну строку (где ID = 12). Вам нужно дважды выбрать из таблицы. Однажды, чтобы получить total_score для id 12 и еще раз, чтобы подсчитать количество строк до CURDATE. Попробуйте что-то вроде:

select A.total_score/count(B.release_date) from movies as A, movies as B 
    where A.id=12 and B.release_date <= CURDATE(); 
0

Согласно моему предположению, Id является первичным ключом (например, идентификатором фильма). Затем запрос возвращает всегда одну строку. Теперь до final_score зависит дата выпуска. Эта дата выпуска должна быть до текущей даты, поэтому следующего запроса достаточно для достижения цели,

SELECT total_score/DATEDIFF(CURDATE(), release_date) AS final_score FROM movies WHERE id = 12 
Смежные вопросы