banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[SQL]兩條學校索迪杯軟件大賽預賽試卷SQL語句考試試題

今天參加了學校的索迪杯預賽考試,結果看到試卷上的日文就懵了,考這玩意要考日文?就跟美國 GRE 考試要考《論語》一樣,反正很變態!!不過還有兩條比較經典的 SQL 題目值得跟大家分享,適合 SQL 的初學者學習,好像俺也就是算個初學者吧,好了,看題目。

第一題 用 SQL 判斷今年或者某一年是否是閏年 說明:SQL?閏年?兩者好像沒多大關係吧,跟考試考日文一樣,真佩服考官了,不過詳細用過 SQL server2000 的朋友肯定知道 NOW () 這個函數,我一開始也是這麼想的,可是 now () 包含太多的無用信息了,而且處理比較麻煩,於是又想到另一個函數 GETDATE (), 目前在 MSSQL2000 可用,其他的不太清楚,可以參閱用戶手冊,GETDATE () 的返回信息是今天的日期。

比如 :

SELECT GETDATE() AS DATE

結果是:

Dec 18 2008 22:20PM

包括 日期,時間,好,那我們就要這個年份

另外介紹一個日期截取函數 DATEPART ()

從函數名就可以知道了吧,就是用特定的索引截取響應的數據,我目前知道的 year mouth 都是可用,具體的參看用戶手冊

用法如下:

DATEPART(month, GETDATE())

那如何判斷一年是否是閏年呢?如果年份能整除 4 且不是 100 的倍數的是閏年,如果 是 100 的倍數,那麼就要除以 400 了

所以可以這麼判斷

DECLARE @year INT
IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'

所以綜上所述,SQL 語句如下:

DECLARE @year INT

SET @year = DATEPART(month, GETDATE())

IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'

第二題 現有學生的課程成績表 (SCG) 的包含學生 ID (SID, int)、課程 ID (CID ,int)、 成績 (grade ,int) 這幾列,求這些學生成績中每門學科成績的前兩名,按學號排序, 不考慮成績並列情況

分析,主要就是求出 TOP 2 就好了,另外要具體課程具體分析,因為包括不只一門 成績,因此需要多級嵌套查詢,效率可能較低,如果大家有更好的想法的話,歡迎 留言討論

SQL 語句如下:

SELECT t.SID AS 學生 ID , t.CID AS 課程 ID , t.grade as 分數
FROM SCG AS t
WHERE grade IN
(
SELECT TOP 2 grade
FROM SCG
WHERE
t.CID = SCG.CID
ORDER BY grade DESC
)
ORDER BY SID

* 注,經過‘漢子’網友的提醒,修改了部分語句

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。