我问这个问题有点恼火,但是有人会好心地消除这段代码中的缺陷吗?我的 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/