Sqlite 多个数字范围

问题描述 投票:0回答:1

我有一个如下所示的 sqlite 表:

时间 数字
2024-02-23 03:00:00 -0.0415385690329766
2024-02-23 03:15:00 -1.24717775905644
2024-02-23 03:30:00 -0.598224308602898
2024-02-24 03:00:00 -0.391209672798098
2024-02-24 03:15:00 -3.01903966597076
2024-02-24 03:30:00 -1.05561725758225
2024-02-25 03:00:00 0.134035229803659
2024-02-25 03:15:00 -2.0615858352579757
2024-02-25 03:30:00 0.0470381575095116
2024-02-25 03:45:00 0.072381723812783

可以按照小数点后第一位来统计数字吗? 我想看看有多少个数字位于多个小数位之间(例如:-0.1 和 -0.2 之间等等)

结果应该是这样的:

范围
-3.1:-3.0 1
-2.1:-2.0 1
-1.3-1.2 1
-1.2-1.1 0
-1.1-1.0 1
-1:-0.9 0
-0.9:-0.8 0
-0.8:-0.7 0
-0.7:-0.6 0
-0.6:-0.5 1
-0.5:-0.4 0
-0.4:-0.3 1
-0.3:-0.2 0
-0.2:-0.1 0
-0.1:0 1
0:0.1 2
0.1:0.2 1
0.2:0.3 0
0.3:0.4 0
0.4:0.5 0
0.5:0.6 0
0.6:0.7 0
0.7:0.8 0
0.8:0.9 0
0.9:1.0 0

我找到了这个解决方案,但它不起作用: https://dba.stackexchange.com/questions/22491/how-do-i-calculate-count-for-a-range-without-needing-to-use-multiple-queries

SELECT
  case
    when number BETWEEN 0 AND -0.1 THEN '0:-0.1'
    when number BETWEEN -0.1 AND -0.2 THEN '-0.1:-0.2'
    when number BETWEEN -0.2 AND -0.3 THEN '-0.2:-0.3'
    when number BETWEEN -0.4 AND -0.5 THEN '-0.4:-0.5'
    when number BETWEEN -1 AND -2 THEN '-1:-2'
    else 'other numbers'
  end as `range`,
  COUNT(1) as count
from table1
group by `range`

现在我得到了这个结果,所以我的查询确实有问题,但我无法弄清楚。

范围
其他号码 10

数据库小提琴: https://dbfiddle.uk/S0I1MBaT

sql sqlite
1个回答
0
投票

可以按照小数点后第一位来统计数字吗?我想看看多个小数点之间有多少个数字(例如:

-0.1
-0.2
之间等等)

是:使用

abs(x)
floor(x)
(或
ceil(x)
,具体取决于您今天的心情)来截断数字的最高有效数字,并使用
trunc(x)
删除最低有效数字。

...所以如果 SQLite 有

TRUNC(value,significantDigits)
函数,那么获取 only 数字的第一个小数位数字就是
TRUNC( ABS( n ) - FLOOR( n ), 1 )

...但是因为 SQLite 的

trunc(x)
只是完全修剪掉小数部分,所以您需要进行一些乘法...

WITH c AS (

    SELECT
        TRUNC( 10 * ( ABS( t.number ) - FLOOR( t.number ) ) ) AS firstDecimalDigit,
        t.number,
        t.time,
    FROM
        myTable AS t
)
SELECT
    c.firstDecimalDigit,
    COUNT(*) AS "Count"
FROM
    c
GROUP BY
    c.firstDecimalDigit
ORDER BY
    c.firstDecimalDigit;
© www.soinside.com 2019 - 2024. All rights reserved.