日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL实战案例100例(一)-如何解决非等值范围查找问题?

發布時間:2023/12/2 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL实战案例100例(一)-如何解决非等值范围查找问题? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求背景

有兩張表,A表記錄了很多款產品的三個基礎字段,分別是產品ID,地區代碼和重量:

B表是運費明細表,這個表結構很“業務”。每行對應著單個地區,不同檔位重量,所對應的運費:

比如121地區,0-0.5kg的產品,運費是5.38元;2.01(實際應該是大于1)-3kg,運費則是5.44元。

現在,我們想要結合A表和B表,統計出A表每個產品付多少運費,應該怎么實現?

可以先自己思考一分鐘圖片

解題思路

人海戰術

A表一共215行,我們只需要找215個人,每個人只需要記好自己要統計那款產品的地區代碼和重量字段,然后在B表中根據地區代碼,找到所在地區運費標準,然后一眼掃過去,就能得到最終運費了。

兩個“只需要”,問題就這樣easy的解決了。

問題變成了,我還差214個人。

解構戰術

通過人海戰術,我們其實已經明確了解題的樸素思路:根據地區代碼和重量,和B表匹配,返回運費結果。

難點在于,B表是偏透視表結構的,運費是橫向分布,用Pandas就算用地區代碼匹配,還是不能找到合適的運費區間。

怎么辦呢?

如果我們把B表解構,變成“源數據”格式,問題就全部解決了:

轉換完成后,和A表根據地區代碼做一個匹配篩選,答案就自己跑出來了。

下面是動手時刻。

具體實現

先導入數據,A表(product):

B表(cost):

要想把B表變成“源數據”的格式,關鍵在于理解stack()堆疊操作,結合示例圖比較容易搞懂:

通過stack操作,把多列變為單列多行,原本的2列數據堆成了1列,從而方便了一些場景下的匹配。要變回來也很簡單,unstack即可:

在我們的具體場景中,先指定好不變的索引列,然后直接上stack:

這樣,就得到了我們目標的源數據。接著,A表和B表做匹配:

值得注意的是,因為我們根據每個地方的重量區間做了堆疊,這里的匹配結果,每個產品保留了對應地區,所有重量區間的價格,離最終結果還有一步之遙。

需要把重量區間做拆分,從而和產品重量對比,找到對應的重量區間:

接著,根據重量的最低、最高區間,判斷每一行的重量是否符合區間:

最后,篩選出符合區間的產品,及對應的價格等字段:

數據源

地區代碼 地區縮寫 0~0.5 0.501~1 1.01~2 2.01~3 3.01~4 4.01~5 5.01~7 7.01~10 10.01~15 15.01~100000 121 AS 5.38 5.38 5.38 5.44 5.53 5.58 5.58 6.09 6.1 6.24 122 BW 6.70 6.80 7.13 7.49 7.85 8.21 9.05 10.04 11.69 13.96 123 Gos 7.21 7.34 7.68 8.09 8.46 8.88 9.8 10.88 12.65 15.11 124 Wol 7.21 7.34 7.68 8.09 8.46 8.88 9.8 10.88 12.65 15.11 125 New 7.21 7.34 7.68 8.09 8.46 8.88 9.8 10.88 12.65 15.11 126 Can 7.21 7.34 7.68 8.09 8.46 8.88 9.8 10.88 12.65 15.11 127 Alb 7.21 7.31 7.65 8.05 8.46 8.86 9.76 10.84 12.61 15.09 128 Twe 7.21 7.23 7.64 8.04 8.44 8.84 9.75 10.83 12.61 15.09 129 NSW 8.93 9.71 10.85 12.01 13.16 14.4 16.71 20.19 26 34.2 130 Mel 6.75 8.04 8.51 8.9 9.41 9.95 10.94 12 14.08 17.13 131 Mlo 7.14 8.43 8.86 9.34 9.85 10.35 11.45 12.66 14.73 17.93 132 Gee 7.69 10.83 11.49 12.25 12.99 13.74 15.39 17.25 20.38 25.28 133 Bal 7.69 12.36 13.29 14.28 15.29 16.28 18.45 20.95 25.23 31.86 134 Wod 7.69 9.75 10.39 11.08 11.8 12.51 14.08 15.84 18.85 23.54 135 VIC 8.74 14.59 15.74 16.98 18.18 19.46 21.73 24.88 30.14 38.41 136 Bri 6.83 7.94 8.38 8.86 9.41 9.99 11.03 12.15 14.1 17.1 137 BTT 7.36 8.34 8.83 9.34 9.9 10.41 11.61 12.94 15.21 18.74 138 Ips 7.93 10.91 11.84 12.84 13.86 14.83 17.04 19.63 23.98 30.79 139 Gol 7.93 9.30 10.20 11.13 12.09 13.08 15.08 17.53 21.65 28.14 140 Coo 7.93 9.59 10.26 11.01 11.76 12.55 14.23 16.13 19.4 24.55 141 Sun 7.93 10.86 11.84 12.86 13.88 14.83 17.04 19.63 23.99 30.8 142 QA 9.04 13.84 15.31 16.81 18.3 19.84 22.64 26.44 32.91 43.01 143 QLD 9.04 14.50 16.70 18.89 21.13 23.4 27.56 33.33 43.26 58.7 144 LDQ 9.04 14.81 17.30 19.81 22.33 24.91 29.71 36.23 47.55 65.23 145 Ade 7.15 8.40 9.04 9.66 10.28 10.96 12.39 14.08 16.94 21.43 146 AD 7.36 8.44 9.05 9.7 10.34 11.03 12.49 14.15 17.06 21.55 147 SA 9.04 14.20 16.13 18.03 19.99 21.96 25.68 30.69 39.41 59.41 148 Per 7.31 10.50 11.95 13.45 14.94 16.45 19.25 23.1 29.69 39.99 149 Pe 7.51 10.79 12.25 13.81 15.33 16.85 19.75 23.66 30.43 40.96 150 WA 9.04 16.25 20.23 24.25 28.35 32.5 40.31 51.03 69.5 98.51 151 WAE 9.04 16.39 20.49 24.64 28.86 33.18 41.16 52.19 71.26 101.09 152 Tas 7.30 10.23 11.33 12.46 13.66 14.85 17.04 20.05 25.24 33.31 153 TWB 8.41 11.48 12.70 13.95 15.3 16.63 19.09 22.49 28.3 37.35 154 NTA 9.04 16.34 20.39 24.49 28.66 32.9 40.88 51.79 70.66 100.2 155 NTB 9.04 16.34 20.39 24.49 28.66 32.9 40.88 51.79 70.66 100.2 156 Nor 7.75 12.73 14.96 17.19 19.43 21.66 25.9 31.68 41.71 57.31 157 Chr 7.75 14.43 17.35 20.31 23.26 26.21 31.81 39.48 52.76 73.41 158 Aus 7.75 11.81 13.11 14.44 15.74 17.04 19.54 22.94 28.81 37.98

總結

以上是生活随笔為你收集整理的MySQL实战案例100例(一)-如何解决非等值范围查找问题?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。