我有一个带购买表的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     [email protected]
327     6.00    2012-01-05 10:40:57     0223-3945   R T     [email protected]
329     12.00   2012-01-02 04:54:45     1087-7072   P B     [email protected]
294     7.00    2012-01-02 04:59:11     4144-2426   P B     [email protected]
285     6.00    2012-01-02 05:12:39     8027-1641   P B     [email protected]
1079    21.00   2012-01-02 05:05:07     2447-7971   P B     [email protected]
331     10.00   2012-01-02 19:14:38     3916-5434   y a     [email protected]


我的问题是,我将如何在1行中写一个查询该月每个人的购买总数,以便得到类似以下的结果?

345     36.00   2012-01-17 16:42:33     7757-3097   T T     [email protected]
327     6.00    2012-01-05 10:40:57     0223-3945   R T     [email protected]
329     46.00   2012-01-02 04:54:45     1087-7072   P B     [email protected]
331     10.00   2012-01-02 19:14:38     3916-5434   y a     [email protected]


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

谢谢

最佳答案

实际上,您的示例不合适,或者您缺少有关问题本身的信息。回答此问题:如果您想要一条线路,包括您想要该线路的总序列号?拥有详细信息的汇总是常识(只要您不指定诸如and also I want the most recent purchase date for each email之类的条件)。

另一种看待这种情况的方式是:您采用什么标准来选择该序列号1087-7072而不是2447-7971来选择[email protected]?相同的问题适用于字段1和3。

因此,据我了解,这对您有用(当然,最少)是:

36.00   T T     [email protected]
6.00    R T     [email protected]
46.00   P B     [email protected]
10.00   y a     [email protected]


您可以通过以下查询获得此信息(根据您的表模式,我假设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


让我知道这是否是您(实际上)正在寻找的东西。

10-06 05:41