更新:
這個函數在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