首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >简单的mySQL查询+统计分析

简单的mySQL查询+统计分析
EN

Stack Overflow用户
提问于 2018-06-23 06:56:06
回答 1查看 64关注 0票数 0

我在一个有大约一百万条记录的数据库中寻找模式。我一直在尝试使用Keras和TensorFlow,特别是LSTM,

然而,由于我是这个领域的新手,在这方面,我发现执行一些非常具体的查询会得到更好的结果。

具有包含以下数据的下表:

代码语言:javascript
复制
round   value   class       creacion
1       15.49   H       2018-01-27 14:03:54
2       7.42    H       2018-01-27 14:04:42
3       1.04    L       2018-01-27 14:39:28
4       2.71    H       2018-01-27 14:39:36
5       1.95    L       2018-01-27 14:39:59
6       4       H       2018-01-27 14:40:17
7       4.4     H       2018-01-27 14:40:45
8       1.52    L       2018-01-27 14:41:14
9       28.69   H       2018-01-27 14:41:28
10      7.44    H       2018-01-27 14:42:25
11      1.1     L       2018-01-27 14:43:02
12      1.1     L       2018-01-27 14:43:12
13      1.41    L       2018-01-27 14:43:21
14      1.04    L       2018-01-27 14:53:10
15      1.66    L       2018-01-27 14:53:19
16      8.44    H       2018-01-27 14:53:34
17      1.55    L       2018-01-27 14:54:13
18      2.39    H       2018-01-27 14:55:29
19      2.9     H       2018-01-27 14:55:50
20      1.66    L       2018-01-27 14:56:13
21      2.7     H       2018-01-27 14:56:29
22      7.53    H       2018-01-27 14:56:51
23      2.04    H       2018-01-27 14:57:28
24      1.97    L       2018-01-27 14:57:47
25      1.35    L       2018-01-27 14:58:05

如您所见,我将所有小于2的值归类为'L‘(低)值,将大于2的值归类为H(高)值。

所以这里的主要目标是尝试预测下一个值。

我一直在使用这个查询,它将100个值相加,高值为2,低值为1。下面的查询将最后100个结果相加,并提供一个数字作为输出,假设该数字低于中位数,我们可以预测出现高值的可能性会增加。

代码语言:javascript
复制
SELECT SUM(n)
FROM (
SELECT *, IF(value < 2, @nvalue := 1, @nvalue := 2) AS n
FROM crawler
ORDER BY round DESC
LIMIT 0, 100
) AS sub

所以,第一个问题是关于查询的:

我想创建一个新列,添加前面100个值的总和。你知道如何做到这一点吗?

我可以执行以下查询来复制结果:

代码语言:javascript
复制
SELECT round, value, class, creacion, sum(n)
FROM (
SELECT *, if(value < 2, @nvalue := 1, @nvalue := 2) AS n
FROM crawler
ORDER BY round DESC
LIMIT 0, 100
) AS sub

但是,它显然只显示最后一条记录:

代码语言:javascript
复制
round   value   class   creacion                sum(n)
560894  3.24    hi      2018-06-22 22:58:59     162

当我实际上在寻找相同的结果时,但是每一条记录都有一个限制,以避免大的加载时间。

EN

回答 1

Stack Overflow用户

发布于 2018-06-23 07:03:31

获取最后一百个值的天真方法是:

代码语言:javascript
复制
select c.*,
       (select sum(c2.value)
        from (select c3.*
              from c3
              where c3.creation <= c.creation
              order by c3.creation desc
              limit 100
             ) c2
       ) as sum_last100
from crawler c;

因为相关性子句是两层的,所以MySQL不接受这一点。

在MySQL 8+中,这要容易得多:

代码语言:javascript
复制
select c.*,
       sum(value) over (order by creation rows between 99 preceding and current row) as sum_last100
from crawler c;

在这一点上,我可能建议您切换到MySQL 8或其他数据库(如Postgres)。在旧版本的MySQL中,让您想要的查询在一百万行上高效工作可能不值得。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50996465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档