我有一个如下所示的 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
可以按照小数点后第一位来统计数字吗?我想看看多个小数点之间有多少个数字(例如:
和-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;