現有兩張表
一張表為數量表(上萬資料)
甲 1233
乙 2233
丙 3233
丁 4233
另一張為區間表 (此處為二維表描述,可根據實際改一維表)
甲 500內 為等級A,500-1000 等級 B 1000-1500等級C 1500以上等級D
乙 500內 為等級A,500-1500 等級 B 1500-2000等級C 2500以上等級D
丙 1000內 為等級A,1000-2000 等級 B 2000以上上等級D (注意,無C)
丁 1000內 為等級A,1000-3000 等級 B 3000以上上等級C
如何匹配出
甲 等級B
乙 等級C
丙 等級D
丁 等級C
大家動動腦子,我已經想了好多天了......
uj5u.com熱心網友回復:
其實就是執行差不多excel中frequency這個函式的uj5u.com熱心網友回復:
區間表結構是名稱 等級 開始數量 結束數量
甲 等級A NULL 500
select * from 數量表 as a, 區間表 as b
where a.名稱 = b.名稱 and a.數量 >=ifnull(b.開始數量,a.數量) and a.數量 < ifnull(b.結束數量, a.數量+1)
uj5u.com熱心網友回復:
樓上的做法可以實作,查詢效率可以再改善一下。數量表不變。修改區間表,四個欄位:
分類(甲乙丙丁...),等級名稱(ABC...), 等級區間下限(第一個等級可以設定為最小可能值,比如-1),等級區間上限(最后一個區間設定為最大可能值,比如999999)
偽碼供參考:
SELECT quant.分類, rang.等級名稱
-- 此處用LEFT JOIN,防止例外值超出 上下限
FROM 數量表 quant LEFT JOIN 區間表 rang ON quant.分類 = rang.分類
WHERE quant.數量 >= rang.下限 AND quant.數量 < rang.上限
這么修改,估計查詢速度至少可以提高一個數量級。
uj5u.com熱心網友回復:
各位大神說的都有道理給我了一定的啟發
我最后定下來,用的是存盤程序
設定一個闕值,判斷是否大于闕值
比如
區間表 (此處為二維表描述,可根據實際改一維表)
甲 500內 為等級A,500-1000 等級 B 1000-1500等級C 1500以上等級D
我就設定一維表
甲 等級A 0
甲 等級B 500
甲 等級C 1000
然后
數量表開始判斷所有數值
從1開始 到區間表最高等級,回圈
比如 甲 833
第一步,數值大于0 成立 為A
下一步判斷,數值大于500 成立 為B
下一步判斷,數值大于1000 不成立
結束回圈
發現速度也還行,200多w行。
我這樣做的想法是,最怕用戶會寫錯區間,比如等級A 0-500,等級B 寫了450-1000,這樣類似477這樣的就可能判斷錯
大神們,看看,這樣可行嗎?有什么硬傷
uj5u.com熱心網友回復:
區間怎么會寫錯,你自己的程式不會控制好么? 比如給用戶輸入的只有區間的分隔值,程式或在資料庫中自動生成開始和結束值不行么?硬要用戶寫才行?uj5u.com熱心網友回復:
當然,你愿意用回圈也沒問題,反正能達到目的就行轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/102448.html
標籤:MySQL
上一篇:mysql 查詢所有隊伍攻擊其他隊伍最多的前5條 攻擊資料很多 200分~
下一篇:videocapx怎么抓圖
