MySQL使用不同的WHERE子句执行多个计数并查看结果

时间:2016-10-18 12:54:31

标签: php mysql sql

我试图从我的订单表中获取:每个客户在一周内下达的订单数量,然后在下周再次计数,然后再次,再次等等。

我正在使用COUNT但它会一直带回一个空结果。

这是我的查询。

SELECT `uid`, (SELECT COUNT(`uid`) FROM `orders` WHERE `order_timestamp` > '1476707688' and `order_timestamp` < '1476189288') as 'number1',
       (SELECT COUNT(`uid`) FROM `orders` WHERE `order_timestamp` > '1476189288' and `order_timestamp` < '1475584488') as 'number2',
       (SELECT COUNT(`uid`) FROM `orders` WHERE `order_timestamp` > '1475584488' and `order_timestamp` < '1474979688') as 'number3'
FROM `orders` ORDER BY `uid` ASC

结果如下:

enter image description here

我知道多个客户一周内会有多个订单。

你如何做这个查询? 一个查询,它将返回客户在该时间段内完成的订单数量?

干杯,

2 个答案:

答案 0 :(得分:3)

只需使用条件聚合:

SELECT `uid`,
       SUM(`order_timestamp` > '1476707688' and `order_timestamp` < '1476189288') as number1,
       SUM(`order_timestamp` > '1476189288' and `order_timestamp` < '1475584488') as number2,
       SUM(`order_timestamp` > '1475584488' and `order_timestamp` < '1474979688') as number3
FROM `orders`
GROUP BY `uid` ASC;

注意:这是按uid汇总的,因此每uid而不是每个订单会有一行。这似乎是明智之举。

答案 1 :(得分:-1)

你可以试试如下吗?

SELECT * FROM {table} WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY uid DESC;        
SELECT * FROM {table}WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY uid DESC;
SELECT * FROM {table}WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY uid DESC;