Python 如何在sqlite查询中将组中的年份合并为10
电影中期、名称、年份、等级 我想数一数十年内的电影数量。假设表中的年份从1931年开始 那么从1931年到1940年将形成一个十年 我的问题是:Python 如何在sqlite查询中将组中的年份合并为10,python,sql,pandas,sqlite,date,Python,Sql,Pandas,Sqlite,Date,电影中期、名称、年份、等级 我想数一数十年内的电影数量。假设表中的年份从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 FR
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)
输出:
这个查询的问题是,它从每一年开始计算十年。
如果1931年是数据库中最低的一年,那么第一个十年应该从1931年开始,下一个十年应该从1941年开始,而不是从1936年开始
非常感谢您对这方面的任何见解我认为这正是您想要的:
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年,年份/10是193年,那么193*10+1产生1931年,而193*10+10产生1940年
我不认为你真的需要countdistinct count来做这件事。我认为这正是你想要的:
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年,年份/10是193年,那么193*10+1产生1931年,而193*10+10产生1940年
我不认为你真的需要countdistinct count,你应该这样做。如果你想要从表中最小年份开始的几十年,请使用以下方法:
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
请参阅。如果您想要从表中最小年份开始的十年,请使用以下选项:
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
请参阅。能否帮助我理解为什么我的原始查询会给出每个唯一查询的结果year@LalitJain:原始查询的主要问题是它是按年份分组的,虽然您需要按十年进行分组,因此year/10year/10将给出3位数字,如果十年从1941年开始,则year/10将是194,因此在分组时,它将检查year是否有194,并基于此对所有电影进行分组。是的???@LalitJain:是的。@GBM但是这个查询只有在十年从1931年开始或者说从一个人的数字开始是1时才有效。如果一年从1935年开始,那么它将不起作用?请帮助我理解为什么我最初的查询会给出每个唯一的结果year@LalitJain:原始查询的主要问题是它是按年份分组的,虽然您需要按十年进行分组,因此year/10year/10将给出3位数字,如果十年从1941年开始,则year/10将是194,因此在分组时,它将检查year是否有194,并基于此对所有电影进行分组。是的???@LalitJain:是的。@GBM但是这个查询只有在十年从1931年开始或者说从一个人的数字开始是1时才有效。如果一年从1935年开始,那么它就不起作用了?@LalitJain我已经更正并简化了代码。@LalitJain我已经更正并简化了代码。