从同一列计算mysql中的百分比

时间:2015-11-16 18:39:28

标签: mysql

如何计算两个日期之间同一列的百分比?

我有专栏latest例如: 2015-11-16,价值为159,4,今天价值为160,1。

在这些日期之间还有其他值,我现在不感兴趣。与“今天”日期相比,如何计算与特定日期的百分比差异。

修改

SELECT curr.latest * 100 / NULLIF(prev.latest, 0) as percentage
FROM myTable AS curr, myTable AS prev 
WHERE date(prev.timestamp) = '2015-11-16' 
AND date(curr.timestamp) = CURDATE() 
AND curr.the_row_namn = 'apple'

特定日期的列latest的百分比ex。 2015-11-16,使用表the_row_namn中的myTable苹果。

2015-11-16 latest apple the daytoday的差异百分比是多少。

+--------------+--------+------------+
| the_row_namn | latest | timestamp  |
+--------------+--------+------------+
| apple        | 159,40 | 2015-11-16 |
| apple        | 164,1  | 2015-11-17 |
+--------------+--------+------------+

预期输出:(舍入)percentage: 0,2864甚至更好,如果可能的话2,8%

希望这会澄清事情。

2 个答案:

答案 0 :(得分:0)

这是查询可以采用的一般形式:

SELECT a.value / b.value AS abPerc
FROM the_table AS a 
INNER JOIN the_table AS b ON [pairing criteria]
;

答案 1 :(得分:0)

您可以使用以下SELECT声明执行此操作:

SELECT     curr.name,
           curr.value * 100 / NULLIF(prev.value, 0) as percentage
FROM       myTable AS curr
INNER JOIN myTable AS prev
        ON curr.name = prev.name
WHERE      prev.latest = '2015-10-26'
AND        curr.latest = CURDATE()
AND        curr.name = 'apple';

如果您遗漏了最后一个条件,您将获得name每个可能值的结果。

此查询的要点是您使用表两次,一次选择当前记录,一次检索早期记录。您应该在where子句的第一行指定您选择的日期。

一旦有了这两个记录,就可以直接从这两个记录的value列中计算出一个百分比。

NULLIF可以保护您免受division by zero错误的影响。相反,您将获得NULL结果。