【面試題】
某房源平臺(tái)有兩張表來記錄用戶信息、和用戶查看房源信息。
用戶表(用戶號(hào)、用戶注冊時(shí)間)。房源瀏覽日志表,字段有日志號(hào),用戶號(hào),房源號(hào),瀏覽日期。
分析出當(dāng)日瀏覽房源10套以上并且注冊超過一年的用戶
【解題思路】
我們用邏輯樹分析方法來拆解下問題:當(dāng)日瀏覽房源10套以上并且注冊超過一年的用戶。這里我們可以看出用戶需要滿足兩個(gè)條件:
1)當(dāng)日瀏覽房源10套以上,瀏覽信息在瀏覽表中
2)注冊時(shí)間超過一年,注冊信息在注冊表中
涉及2張及以上表的查詢時(shí),需想到《猴子 從零學(xué)會(huì)SQL》里講到的,要用到多表聯(lián)結(jié)。
使用哪種聯(lián)結(jié)呢?
這里我們的條件在兩邊都是需要滿足的,所以使用內(nèi)聯(lián)結(jié)(inner join),兩表的聯(lián)結(jié)字段是用戶號(hào),如下圖所示
兩表聯(lián)結(jié)的SQL
兩表聯(lián)結(jié)后,再來看題目要求的條件。
1.注冊時(shí)間超過一年
這里對注冊時(shí)間用where子句篩選。這里要用到計(jì)算日期的函數(shù)(date_sub
),語法如下:
例子:date_sub(NOW(),INTERVAL 1 year) 代表現(xiàn)在的日期減去一年,也就是去年的這個(gè)時(shí)候
2.當(dāng)日瀏覽房源10套以上這句話翻譯成大白話就是:每個(gè)用戶、每天瀏覽房源10套以上。
涉及到“每個(gè)”要想到用《猴子 從零學(xué)會(huì)SQL》里講過的用“分組匯總”解決這類問題。
按“每個(gè)用戶、每天”分組,匯總(對房源進(jìn)行計(jì)數(shù))。
查詢結(jié)果
【本題考點(diǎn)】
1.涉及到多個(gè)表,要想到用多表查詢,包括使用哪種聯(lián)結(jié),使用哪些字段聯(lián)結(jié)。要能熟練應(yīng)用《猴子 從零學(xué)會(huì)SQL》里的下圖
2.涉及到“每個(gè)”這類問題要想到用“分組匯總”。涉及到“每個(gè)+排名”問題,要想到用窗口函數(shù)
【舉一反三】
下圖是學(xué)生表、成績表和課程表,找出哪些學(xué)生單科成績超過80分,給出姓名、課程名稱和成績
參考答案
查詢結(jié)果: