版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

你看過多少套房子?

猴子
原創(chuàng)
著有暢銷書《數(shù)據(jù)分析思維》,公眾號(hào)(猴子數(shù)據(jù)分析)創(chuàng)始人
收藏

【面試題】

某房源平臺(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é)果: