sql條件語句使用實例
sql條件語句是sql語句中非常重要的,在我們平時的數據庫使用中經常會用得到,在處理一些具體問題時,就可以體現出sql條件語句的優勢了。
假定博客園要在首頁為群組開辟一塊空間,推廣小組,小組能在首頁顯示的條件有四個:
1. 頁面點擊量大于10w
2. 小組人數大于1000
3. 小組帖子數大于10000
4. 小組在2007年之前創建
現在假定4個條件都滿足的小組只有兩個,太少了,推廣位可以推廣10個小組;這時候運營人員要求這4個條件中滿足3個但是第4個條件不滿足的小組算符合條件的小組,如果4個條件都滿足就認為這個小組太火了,不需要在首頁推廣它了。業務邏輯想清楚了,下一步就該寫代碼了,數據邏輯層的代碼的任務假定交給我了,我要考慮滿足4個條件中3個成立的sql怎么寫。
為了敘事方便,我們假如小組表的名字為Group,相關的條件字段是Pv,UserCount,PostCount,CreateTime:分別表示小組的點擊量,人數,帖子數,創建時間.
寫sql語句,上面的四個條件滿足至少3個,有多少種情況呢?這是一個組合問題,一共有多少種的公式我已經忘記了,我要根據感覺寫寫看:
- SELECT * FROM Group
- WHERE (Pv>100000 AND UserCount>1000 AND PostCount>10000 AND CreateTime > 20070101)
- OR (Pv>100000 AND UserCount>1000 AND PostCount<10000 AND CreateTime < 20070101)
- OR (Pv>100000 AND UserCount<1000 AND PostCount>10000 AND CreateTime < 20070101)
這個Sql語句條件還行,但是我們的題目是n個條件m個條件成立,如果多了還這么寫,恐怕就很累了,能不能改進呢?答案是肯定的。
- SELECT * FROM Group
- WHERE
- (CASE Pv WHEN Pv>100000 THEN 1 ELSE 0 END) --這是PV的條件成立則為1,否則為0
- +(CASE UserCount WHEN UserCount > 1000 THEN 1 ELSE 0 END) --用戶數條件
- +(CASE PostCount WHEN PostCount > 10000 THEN 1 ELSE 0 END) --帖子數條件
- +(CASE CreateTime WHEN CreateTime < 20070101 THEN 1 ELSE 0 END) --時間條件
- = 3
如果上面的三個表達式加起來值是3就說明恰好滿足三個條件,如果是兩個條件就是等于2,如果擴展為n個條件m個條件成立也很容易寫,很容易維護、修改。
這是一個sql條件語句的技巧,希望對你有用。
【編輯推薦】