CREATE TABLE `vote_days` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`t_id` int(11) NOT NULL COMMENT 'title id',
`r_id` int(11) NOT NULL COMMENT 'release id',
`l_id` int(11) NOT NULL COMMENT 'language id',
`e_id` int(11) DEFAULT NULL COMMENT 'episode_id',
`unix_day` int(11) NOT NULL,
`votes` mediumint(8) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
16000 ~ пример строки, разброс по годам.https://www.db -fiddle.com / f / amvnHkVnFS3YBFYUJNRcbx / 0
В этой таблице указано количество (пользовательских) голосов за каждый день (в формате отметки времени unix).
У нас есть фильмы и телепередачи.(T_id).
В телевизионных заголовках есть e_id (идентификатор эпизода), в фильмах e_id равен NULL.
В нем используются разные форматы (выпуски) и разные языки (l_id).
Вопрос: Я хочу получить сумму всех голосов за названия каждого фильма, но я хочу разделить голоса за телешоу на количество эпизодов.В определенные сроки, упорядоченные по общему количеству голосов (Самые популярные).
Есть ли более эффективный (с точки зрения производительности) способ сделать это?
SELECT
t1.*,
(SUM(t1.votes) / (CASE WHEN t1.e_id IS NULL THEN 1 ELSE COUNT(DISTINCT(e_id)) END) ) as total_votes
FROM `vote_days` t1
GROUP BY t_id
ORDER BY total_votes DESC