mysql - Mysql 查询中用于制作直方图的缺陷,可能是在参数定义中

标签 mysql parameters histogram fault flawed-concept

我问这个问题有点恼火,但是有人会好心地消除这段代码中的缺陷吗?我的 MySQL 服务器不理解这个查询。

它是一个更大的 php-mysql-javascript 的一部分,用户可以在其中定义一个直方图需要有多大。在本例中,期限为 5 天。在将查询呈现给数据库引擎之前,“”之间的数字由 php 脚本计算 $variables 。

brontabel 是一个包含两列 gendate 和 datum1 的表。 Gendate 是其他查询生成表的时间。 tijd 代表商品的购买日期。这会让我很费力地解释为什么,但布隆塔贝尔有不止一个世代。

我发现有一点很重要,那就是我不是 IT 人员。我制作这个脚本是为了解释我公司所需的 IT 服务。因此他们可以用更优雅的语言(如 R 或其他语言)重写/增强程序。 (为了从头开始开发我想要的东西,他们需要大量有关非高斯分布的统计知识)

所以请给出一个我能理解的解决方案!问题“MySQL:获取直方图数据?”中的一些查询让我脑子崩溃:-)

SELECT
    gendate,
    tijd,
    SUM(CASE 
            WHEN (gendate - datum1) >= (tijd - " 5 " ) 
                 AND (gendate - datum1) < tijd 
            THEN 1 ELSE 0 END) AS aantal, 
    SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END)  AS rest,
    (SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END) * 100/count(*))  AS percentage_erna_actief 
 FROM brontabel, 
      (VALUES " 5 ", " 10 ", " 15 ", " 20 ", " 25 ", " 30 ", 
        " 35 " , " 40 ", " 45 ", " 50 ", " 55 ", " 60 ", " 65 ",
        " 70 ", " 75 ", " 80 ") AS X(tijd) 
WHERE gendate = MAX(gendate) 
GROUP BY tijd

PS 抱歉让乔治感到困惑

我想要的是生成所有已购买但尚未发货的商品的条形图(直方图)。该项目将保留在表中,直到发货,然后该行被其他查询从表 brontabel 中删除。

如果您于 2013 年 11 月 19 日购买了商品(datum1),并且该表是在今天 2013 年 11 月 30 日生成的,则 gendate-datum1 = 11(商品/购买已等待 11 天发货),因此栏(由time=15) 将增加 1。

你会得到这样的东西

世代
时间(tijd)
活跃(属于该栏的购买数量正在等待发货) 剩余(有多少购买等待的时间已经超过时间(tijd)才能发货)percentage_erna_actief(剩余以百分比表示)

等待发货的商品/购买总量 = 200(表中 200 行)

gendate    time    active    rest    percentageernaactief
30-11      5       2         198      99%  (2 purchases are less than 5 days waiting for shipping)
30-11      10      6         192      96%  (6 purchases are between 5 and 10 days waiting for shipping)
30-11      15      12        180      90%
30-11      20      20        160      80%
30-11      25      0         160      80%
30-11      30      0         160      80%
30-11      35      40        120      60%
...

希望这能让大家更清楚

最佳答案

要了解你想要的MySql需要使用这个:

SELECT
    gendate,
    tijd,
    SUM(CASE 
            WHEN (gendate - datum1) >= (tijd - 5 ) 
                 AND (gendate - datum1) < tijd 
            THEN 1 ELSE 0 END) AS aantal, 
    SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END)  AS rest,
    (SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END) * 100/count(*))  AS percentage_erna_actief 
 FROM brontabel, 
      (select 5 tijd union select 10 union select 15 union 
       select 20 union select 25 union select 30 union
       select 35 union select 40 union select 45 union
       select 50 union select 55 union select 60 union
       select 65 union select 70 union select 75 union
       select 80) AS X
WHERE gendate = ( select MAX(gendate) from brontabel )
GROUP BY gendate, tijd

X 表包含您需要的值

where 部分从 gendate 获取最大值,此外,您还必须按未聚合的列进行分组。

另请记住,您正在执行笛卡尔计划,这意味着对于 brontabel 表中的每个注册表,都将乘以 X 表中的值数量

关于mysql - Mysql 查询中用于制作直方图的缺陷,可能是在参数定义中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304550/

相关文章:

r - ggplot 不按组对直方图进行着色

python - 更改直方图 matplotlib 中的默认 x 范围

mysql - Heroku 数据库 :pull to local mysql utf8

java - 如何将用户配置文件中的图像链接存储到mysql数据库中(不使用BLOB)

php - 无法使用嵌套的 while 循环执行准备好的语句

c++ - 在 C++ 中使用默认参数跳过模板参数真的不可能吗,为什么语法另有建议?

php - 使用 PHP 中表中的按钮更新 mysql 数据库

Oracle:显示错误参数

java - 在 Java 的构造函数中设置参数值

ios - GPUImage 在另一个 View 中显示直方图