对同一WHERE claus在同一查询中执行COUNT和SUM

时间:2017-01-27 21:13:06

标签: mysql sql

我有一个表格,其中包含此行totalprice

我正在根据状态字段和X和X之间的日期

执行WHERE子句

我想计算日期之间的订单,并获得这些订单的总价格的总和。

SELECT COUNT(*) 
FROM `orders` 
WHERE `processed` IN (2,3,4,5) 
AND `date` BETWEEN %s AND %s", $start_timestamp, $end_timestamp

代码在Wordpress中运行,因此%s 我无法弄清楚如何让SUM(totalprice)在同一个查询中工作以避免单独执行

2 个答案:

答案 0 :(得分:0)

您的查询应该只添加您需要的术语:

"SELECT COUNT(*), SUM(totalPrice) FROM 'orders' WHERE 'processed' IN (2,3,4,5) AND 'date' BETWEEN %s AND %s", $start_timestamp, $end_timestamp

答案 1 :(得分:0)

为什么不能选择两列 - 一列给出计数,另一列给出总和。即使有单独的条件来计算计数和总和,您也不需要对该进行两次查询。

  

哦,我必须这样做

订单数量和总价格总和(好的版本)

select count(*), sum(totalprice) from orders where processed in (2,3,4,5) 
and date between start_timestamp and end_timestamp;

订单数量和总价格总和(坏版本)

select count(case when date between start_timestamp and end_timestamp 
then 'valid' else null end) count_of_orders,
sum(case when date between start_timestamp and end_timestamp 
then totalprice else 0 end) sum_of_total_price;

订单数量和总价格总和(每天)

select date(date), count(*), sum(totalprice) from orders 
where processed in (2,3,4,5) 
and date between start_timestamp and end_timestamp group by date(date);

我不能强调这一点

  

绝不使用关键字作为列名称 - 例如,date不应该是列的名称。

当你有计算和总和的单独条件时

select date(date), count(case when totalprice > 100 then 'valid' else null end), 
sum(totalprice) from orders where processed in (2,3,4,5) 
and date between start_timestamp and end_timestamp group by date(date);

你可以做各种各样的事情。