python - 如何在sqlite查询中将组中的年份组合为10
问题描述
MOVIE (Mid, name, year, rank) 我想计算十年内的电影数量。假设表中的年份从 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)
输出:
此查询的问题是对于每个独特的年份,它都从该年份开始计算十年。而所需的输出是如果 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
,year/10
是193
,然后193 * 10 + 1
生产1931
,而193 * 10 + 10
产量1940
。
我认为您实际上不需要count(distinct)
(count()
应该这样做)。
推荐阅读
- java - 我不知道为什么会出现这个错误,请帮助我
- awk - How to check if a string contains at least one letter different from 4 using bash or awk
- html - 我将如何捕获桌面并将其流式传输到浏览器视图?
- python - 如何在指定的 col 位置更改 2D numpy 数组中的某些元素?
- python - 如何在 python 中使用 pickle 读取二进制 txt 文件?
- python - Pandas - 当数据框包含列表时如何搜索值?
- java - Amazon Textract 错误 - 代码 400 无效参数异常
- javascript - CSS 网格显示导致表格高度不成比例
- edgeengine - 如何在 iOS 上发现边缘节点
- c++11 - 使用堆栈的中缀到后缀中的 SIGSEGV 错误