爬蟲爬出了資料放置資料庫,想抓南部工作薪資平均但workpay有文字要濾掉文字這樣sql要如何寫,條件式以最高薪判斷值電子相關在(高雄、台南)
address industry workpay
高雄市岡山區 電子工程相關 月薪37,000~42,000元
高雄市新興區 電子儀器相關 待遇面議
高雄市苓雅區 餐廳服務相關 月薪26,000~35,000元
高雄市岡山區 電子資訊相關 月薪37,000~55,000元
台北市信義區 電子工程相關 月薪37,000~55,000元
台南市新營區 電子工程相關 待遇面議
一般建議是寫正則來處理。
只是你的資料情況,條件並不太好寫。
還是會建議你拉出來用程式跑。
用sql來跑正則拉條件的話。會有點難度就是了。
如果可以在爬蟲時寫入資料就會正則來做區分後,另開欄位存薪水值。
這樣你要查尋時才好做處理。要邊處理邊做max搜尋是有點難度了。
我想建議你改一下爬蟲程式,
把WorkPayd欄位改成兩欄: WorkPay_Min, WorkPay_Max
然後把例如"月薪37,000~42,000元"這樣子的結果, 再過濾調整為
WorkPay_Min放37,000
WorkPay_Max放42,000
接下來SQL就好寫多了.
這個可以查出高薪在那個行業, 在什麼地區...Select Address, Industrial, Max(WorkPay_Max) from Table Group By Address, Industrial;
這個可以查出最高薪資那個地區那個行業...Select Address,Industrial,WorkPay_Max from [Table] where WorkPay_Max = (Select Max(WorkPay_Max) from [Table])
其實待遇面議的, 有可能高薪更高, 所以這調查也只是參考而己.
這個...玩一下~不曉得是否是這樣~
declare @a table(
[address] nvarchar(50)
,[industry] nvarchar(50)
,[workpay] nvarchar(50)
)
insert into @a
values(N'高雄市岡山區',N'電子工程相關',N'月薪37,000~42,000元')
,(N'高雄市新興區',N'電子儀器相關',N'待遇面議')
,(N'高雄市苓雅區',N'餐廳服務相關',N'月薪26,000~35,000元')
,(N'高雄市岡山區',N'電子資訊相關',N'月薪37,000~55,000元')
,(N'台北市信義區',N'電子工程相關',N'月薪37,000~55,000元')
,(N'台南市新營區',N'電子工程相關',N'待遇面議')
select [address]
,[industry]
,max([workpay]) [workpay]
from @a
where (1=2
or [address] like N'高雄%'
or [address] like N'台南%'
)
and (1=2
or [industry] like N'電子%'
)
and (1=2
or [workpay] like N'%[0-9]%'
)
group by [address]
,[industry]
修改2
DECLARE @str nvarchar(max)
DECLARE @expres VARCHAR(50) = '%[^0-9]%'
select @str=min([workpay])
from @a
where (1=2
or [address] like N'高雄%'
or [address] like N'台南%'
)
and (1=2
or [industry] like N'電子%'
)
and (1=2
or [workpay] like N'%[0-9]%'
)
set @str = left(@str,CharIndex('~', @str ))
while PatIndex( @expres, @str ) > 0
SET @str = Replace( @str, Substring( @str, PatIndex( @expres, @str ), 1 ),'')
SELECT @str workpay
還是你想要純SQL??
select (
select '' + NumStr
from (
select (case when isNumeric(Substring( y,Sort, 1 )) > 0 then Substring( y,Sort, 1 ) else '' end) as NumStr
from (
select Row_Number()Over(order by [number]) as Sort
from master..spt_values
) as k
,(
select Left([y],CharIndex('~',[y])) [y]
from (
select min([workpay]) [y]
from @a
where (1=2
or [address] like N'高雄%'
or [address] like N'台南%'
)
and (1=2
or [industry] like N'電子%'
)
and (1=2
or [workpay] like N'%[0-9]%'
)
) k
) k2
where Sort <= Len(y)
) k
where NumStr <> ''
for xml path('')
) workpay