MySQL排序和减法/加法值

时间:2017-09-27 19:54:32

标签: mysql sql

我有一个数据库,其中包含用户和他们共花的钱。如果Bob花了100,之后我们有Bob => 170,意味着他花了额外的70; 我写了命令让我的桌子正确。这是我的代码:

SELECT `name`, `Money`, `date` FROM `Money` WHERE `date` > "2000-12-30" AND `date` < "2003-12-31"ORDER BY `name`, `Money` ASC;

未分类________________________按名称和花钱分类

|id|name  |Money|date      |    |id|name  |Money|date      |
|__|______|_____|__________|    |__|______|_____|__________|
|1 |Bob   |100  |01/01/2000|    |1 |Bob   |100  |01/01/2000|
|2 |Josh  |150  |02/02/2000|    |2 |Bob   |170  |01/01/2001|
|3 |Bob   |170  |01/01/2001|    |3 |Bob   |210  |02/02/2002| 
|4 |Den   |130  |02/02/2000|    |4 |Bob   |240  |02/02/2003|
|5 |Cherry|140  |02/02/2000|    |5 |Cherry|140  |02/02/2000|
|6 |Den   |180  |02/02/2001|    |6 |Cherry|240  |02/02/2001|
|7 |Ron   |150  |02/02/2000|    |7 |Den   |130  |02/02/2000|
|8 |Bob   |210  |02/02/2003|    |8 |Den   |180  |02/02/2001|
|9 |Ron   |210  |02/02/2001|    |9 |Josh  |150  |02/02/2000|
|10|Bob   |240  |02/02/2004|    |10|Josh  |270  |02/02/2001|
|11|Cherry|240  |02/02/2001|    |11|Ron   |150  |02/02/2000|
|12|Josh  |270  |02/02/2001|    |12|Ron   |210  |02/02/2001|

现在,我需要总结2001年(包括)和2003年之间花费的所有资金。不包括2000年之前花费的金额。看起来应该是470.

我找不到命令如何总结。此外,我无法创建新表,并且应该只使用一个命令而不使用php,纯MySQL。我配偶我需要使用子查询,我已经尝试过,但我对此并不自信,我是MySQL新手。

2 个答案:

答案 0 :(得分:0)

您选择的列名称与示例中的列名称不匹配,因此我在示例中使用列名称

如果你想要一个名字之间的总和,你可以使用分组,例如:

select name, sum(money)
from my_table 
WHERE `date` between str_to_date('1999-01-01', '%Y-%m-%d')  AND ('2009-12-31', '%Y-%m-%d')
GROUP BY name
ORDER BY name ASC

还假设您的日期列是日期数据类型

答案 1 :(得分:0)

查询(板块,milage,1999年和2009年之间的日期)似乎不需要对您描述的表格和问题做任何事情。您发布了错误的查询吗?

无论如何,您可以查看2001年之前和之后每个名字的最高金额,并从后者中减去前者:

select sum(money_spent)
from
(
  select
    max(case when year(date) >= 2001 then money end) -
    coalesce(max(case when year(date) < 2001 then money end), 0) as money_spent
  from mytable
  where year(date) <= 2003
  group by name
) money_spent_per_name;