一个简单的mySQL查询+统计分析

时间:2018-06-22 22:56:06

标签: mysql sql select classification

我正在寻找具有约100万条记录的数据库中的模式。我一直在使用Keras和TensorFlow进行实验,特别是LSTM,

但是,由于我是该领域的新手,因此在进行一些非常具体的查询时我发现了更好的结果。

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

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

如您所见,我将所有低于2的值分类为“ L”(低)值,将较大的分类为H(高)值。

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

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

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

因此,第一个问题与查询有关:

我想创建一个新列,将前100个值的总和相加。你知道怎么做吗?

我可以通过以下查询复制结果:

round   value   class   creacion                sum(n)
560894  3.24    hi      2018-06-22 22:58:59     162

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

public class Params {
    private String dataType;
    private Map<String, List<String>> group;
    private List<Aggregate> aggregates;
    private List<String> scene;
    private List<String> company;
    private List<Map<String, List<String>>> fit;
    private Map<String, String> params;
    private String tempo;
    private String id;
    private String valuation;
}

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

1 个答案:

答案 0 :(得分:1)

获取最后一百个值的简单方法是:

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+中,这要容易得多:

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中,让您所需的查询有效地处理一百万行可能不值得。