как объединить годы в группе до 10 в запросе sqlite - PullRequest
0 голосов
/ 19 января 2020

MOV IE (Середина, имя, год, звание) Я хочу посчитать количество фильмов за десятилетие. Предположим, что год в таблице начинается с 1931 года, а затем годы с 1931 по 1940 год составят десятилетие.

Мой запрос:

query_7 = pd.read_sql_query('''SELECT yr.year as dec_start,yr.year + 9 as dec_end,COUNT(DISTINCT m.MID) as num_movies
                             FROM  (SELECT DISTINCT year FROM Movie) yr ,Movie m WHERE m.year >= yr.year
                             AND m.year < yr.year + 10
                             GROUP BY yr.year 
                             ORDER BY yr.year 
                             ''',conn)

Вывод:

enter image description here

Проблема с этим запросом для каждого уникального года, в котором он начинает отсчитывать десятилетие. в то время как необходим вывод, если 1931 год является самым низким годом в базе данных, то первое десятилетие должно начинаться с 1931 года, а затем с 1941 года, а не с 1936 года.

Любое понимание этого очень ценится

Ответы [ 2 ]

1 голос
/ 19 января 2020

Если вы хотите, чтобы десятилетия начинались с минимального года в таблице, используйте это:

SELECT 
  (year - s.start_from) / 10 * 10 + s.start_from as dec_start, 
  (year - s.start_from) / 10 * 10 + s.start_from + 9 as dec_end,
  COUNT(DISTINCT MID) as num_movies
FROM  Movie CROSS JOIN (SELECT MIN(year) % 10 start_from FROM Movie) s
GROUP BY dec_start, dec_end 

См. demo .

1 голос
/ 19 января 2020

Я думаю, что это делает то, что вы хотите:

SELECT 
    year/10 * 10 + 1 as dec_start,
    year/10 * 10 + 10 as dec_end,
    COUNT(mid) as num_movies
FROM  Movie
GROUP BY year/10 
ORDER BY dec_start

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

Скажем, год 1934, year/10 равно 193, тогда 193 * 10 + 1 производит 1931, тогда как 193 * 10 + 10 дает 1940.

Я не думаю, что вам действительно нужно count(distinct) (count() должен это сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...