MySQL 使用 比較函數 INTERVAL() 函數 實現數據按區間分組

更新:

這個函數在postgreSQL中是無法使用的,替代方法如下

select t.tag, count(*) from (
select case when id < 2 then 'less 2' 
when id >=2 and id< 5 then '2to5' 
when id>=5 and id<8 then '5to8' 
else 'great 8' 
end as "tag", id 
from generate_series(1, 10) as id) as t 
group by t.tag;

——————

首先看一下它的定義:

INTERVAL(N,N1,N2,N3,..........)

INTERVAL()函數進行比較列表(N1,N2,N3等等)中的N值。該函數如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。如果N爲NULL,它將返回-1。列表值必須是N1<N2<N3的形式才能正常工作。

下面的代碼是顯示 INTERVAL()函數如何工作的一個簡單的例子:

mysql>SELECT INTERVAL(6,1,2,3,4,5,6,7,8,9,10);
+---------------------------------------------------------+
| INTERVAL(6,1,2,3,4,5,6,7,8,9,10)                        |
+---------------------------------------------------------+
| 6                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

結果中,6是從零開始的索引,列表第一個值的值大於N. 在我們的例子中,6 屬於 [6,7) ,所以返回第6個索引

請記住,6是從零開始的索引,列表第一個值的值大於N. 在我們的例子中,7是錯誤的值,它是位於第六索引插槽。

(另 INTERVAL 還是日期計算的關鍵字)

SELECT INTERVAL(6,1,2,3,4,5,6,7,8,9,1); -- 返回比N大的位置

SELECT NOW()-INTERVAL 24 HOUR  --  時間比較: 返回 前一天

 

-------------------------------------------- 定義結束分割線 --------------------------------------------

 

好,下面看一個使用 INTERVAL 實現數據分組的示例

假設有一個下載速度表(有 speed 和 count 兩個字段),

然後統計1M,2M,4M,8M,8M以上這個5個速度區間的個數

select INTERVAL(speed,1000,2000,4000,8000) as i_s, sum(count)
from a_speed_table
group by i_s

上面的 sql 根據速度區間分組,再對不同區間出現的次數求和

 

轉:https://blog.csdn.net/a_ran/article/details/78496923

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章