客户交易总和

时间:2012-03-11 14:37:08

标签: mysql sql

我有一个带有购买表的mysql数据库:

1   Deal Certificate    int(3)  
2   Purchase Price  decimal(4,2) 
3   Purchase Date   timestamp   
4   Serial Number   varchar(9) 
5   Name    varchar(23)     
6   Email   varchar(42) 

运行以下查询后:

 SELECT * 
   FROM `PURCHASES` 
  WHERE `Purchase Date` 
between '2012-01-01' and '2012-01-31'
  order by email

我看到结果:

345     36.00   2012-01-17 16:42:33     7757-3097   T T     xxx@gmail.com
327     6.00    2012-01-05 10:40:57     0223-3945   R T     yyy@gmail.com
329     12.00   2012-01-02 04:54:45     1087-7072   P B     zzz@msn.com
294     7.00    2012-01-02 04:59:11     4144-2426   P B     zzz@msn.com
285     6.00    2012-01-02 05:12:39     8027-1641   P B     zzz@msn.com
1079    21.00   2012-01-02 05:05:07     2447-7971   P B     zzz@msn.com
331     10.00   2012-01-02 19:14:38     3916-5434   y a     aaa@aol.com

我的问题是,如何在一行中为每个月的购买总数编写查询,以便得到如下结果?

345     36.00   2012-01-17 16:42:33     7757-3097   T T     xxx@gmail.com
327     6.00    2012-01-05 10:40:57     0223-3945   R T     yyy@gmail.com
329     46.00   2012-01-02 04:54:45     1087-7072   P B     zzz@msn.com  
331     10.00   2012-01-02 19:14:38     3916-5434   y a     aaa@aol.com

请注意,所有用户P B的交易总计在一行上。

由于

2 个答案:

答案 0 :(得分:2)

未验证:

SELECT  `Deal Certificate`,
        sum(`Purchase Price`) as sum_price
        `Purchase Date`, 
        `Serial Number`,
        Name,
        Email
FROM PURCHASES 
WHERE Purchase Date between '2012-01-01' and '2012-01-31' 
group by `Deal Certificate`
order by email

答案 1 :(得分:0)

实际上,您的示例不合适,或者您缺少有关问题本身的信息。回答这个问题:如果你想要一行包括你想要的那一行的序列号?拥有详细信息(只要您没有指定and also I want the most recent purchase date for each email等标准)是违反常识的。

另一种看法是:您为1087-7072选择此序列号2447-7971而不是zzz@msn.com应用了哪些条件?同样的问题适用于第1和第3领域。

所以,我理解它对你有用(当然最小):

36.00   T T     xxx@gmail.com
6.00    R T     yyy@gmail.com
46.00   P B     zzz@msn.com  
10.00   y a     aaa@aol.com

您可以使用以下查询获取此信息(根据您的表格式,我认为name具有这些值P B):

select sum(`Purchase Price`) as total_sum, name, email from purchases
where `Purchase Date` between '2012-01-01' and '2012-01-31'
group by email, name
order by email

请告诉我这是否(实际上)正在寻找。