引言
在實際的業務統計需求中 有時往往需要對區間進行分組統計查詢,如分數區間,工資區間查詢統計等!mysql中可以利用elt函式來實作此類需求!
接下來看如下時間業務需求:
1:現在要進行統計,小于100的,100~500的,500~1000的,1000以上的,這各個區間的id數
mysql> select * from k1; +------+------+ | id | yb | +------+------+ | 1 | 100 | | 2 | 11 | | 3 | 5 | | 4 | 501 | | 5 | 1501 | | 6 | 1 | +------+------+ 現在要進行統計,小于100的,100~500的,500~1000的,1000以上的,這各個區間的id數 利用interval劃出4個區間 再利用elt函式將4個區間分別回傳一個列名 mysql> select elt(interval(d.yb,0, 100, 500, 1000), '0-100', '100-500', '500-1000', '1000-...') as yb_level, count(d.id) as cnt -> from k1 d -> group by yb_level; +-----------+-----+ | yb_level | cnt | +-----------+-----+ | 100-500 | 1 | | 500-1000 | 1 | | 0-100 | 3 | | 1000-... | 1 | +-----------+-----+ 4 rows in set (0.00 sec)
ELT函式:
格式:ELT(N,str1,str2,str3,...)
ELT函式用于回傳在引數串列中指定的索引號處的字串,
如果N= 1,回傳str1,如果N= 2,回傳str2,等等,如果N小于1或大于引數個數,回傳NULL,ELT()是FIELD()反運算,
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
Interval函式:
格式:INTERVAL(N,N1,N2,N3,...) Interval函式用于回傳N 值再區間段所在的索引位置,位置從0開始 如果N <N1,回傳0, 如果 N1<= N < N2,則回傳1,以此類推 mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200); (23小于30,30的位置是4,于是回傳3) -> 3 mysql> SELECT INTERVAL(10, 1, 10, 100, 1000); (10 大于10,小于100,于是回傳2) -> 2 mysql> SELECT INTERVAL(22, 23, 30, 44, 200); (22小于23,23的位置是1,于是回傳0) -> 0
有了ELT和 Interval函式后,我們的區間統計就方便多了,避免的重復繁瑣的Switch...Case...多重判斷了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546751.html
標籤:MySQL
上一篇:對比分析數倉中行列存的特性
