簡體   English   中英

查找記錄最多的十年,SQL Server

[英]Finding the decade with largest records, SQL Server

我有以下數據庫圖:

電影數據庫圖

我想找到電影數量最多的十年(例如 1990 年到 2000 年)。 實際上它只處理“電影”表。

關於如何做到這一點的任何想法?

您可以使用 SQL Server 中的 LEFT 函數來獲取年份的十年。 十年是一年的前 3 位數字。 您可以按十年分組,然后計算電影的數量。 如果您按電影數量對結果進行排序或排序 - 電影數量最多的十年將位於頂部。 例如:

select
count(id) as number_of_movies,
left(cast([year] as varchar(4)), 3) + '0s' as decade
from movies
group by left(cast([year] as varchar(4)), 3)
order by number_of_movies desc

字符串方法的替代方法是使用整數除法來獲得十年:

SELECT [Year]/10*10 as [Decade]
     , COUNT(*) as [CountMovies]
FROM Movies
GROUP BY [Year]/10*10
ORDER BY [CountMovies] DESC

這將返回所有內容,按電影最多的十年排序。 您可以添加 TOP (1) 以僅獲得頂部,但隨后您需要考慮決勝局方案以確保獲得確定性結果。

select substring(cast([year] as varchar), 1, 3) as Decade,
Count(1) [Count]
from Movies
group by substring(cast([year] as varchar), 1, 3)
order by 2 desc
   SELECT floor(Year(getdate())/10)*10
        , floor(year('5/11/2004')/10)*10
        , floor(Year('7/23/1689')/10)*10
        , floor(Year('7/09/1989')/10)*10

盡管這是一個老問題,但我通過嘗試找到了這個解決方案

    DATE_PART('decade',(year::date)) AS decade,
    DATE_TRUNC('decade',(year::date)) AS decade_truncated,

也適用於

    DATE_PART('century',(year::date)) AS decade,
    DATE_TRUNC('century',(year::date)) AS decade_truncated,

就我而言,我將year作為字符串列。 為了讓電影按幾十年分組,

SELECT DISTINCT NUMRANGE(
CAST(FLOOR(CAST(year AS INT)/ 10) * 10 AS INT),
CAST((FLOOR(CAST(year AS INT)/ 10) * 10) + 9 AS INT)
) AS "decades", COUNT(*) AS "movie_count"
FROM movies
WHERE year IS NOT NULL AND year != ''
GROUP BY decades
ORDER BY movie_count DESC;

這給出了那十年的電影數量。 希望這個可以幫助某人...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM