我有一个带有购买表的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的交易总计在一行上。
由于
答案 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
请告诉我这是否(实际上)正在寻找。