MySQL中的多重计数和分组
我有一个带有2个不同表的db,1用于以下结构的订单详细信息:MySQL中的多重计数和分组,mysql,Mysql,我有一个带有2个不同表的db,1用于以下结构的订单详细信息: -------------- |order_id | -------------- |1234 | -------------- |1235 | -------------- |1236 | -------------- |1237 | -------------- 另一个表用于记录订单的更新次数 ------------------------------------------
--------------
|order_id |
--------------
|1234 |
--------------
|1235 |
--------------
|1236 |
--------------
|1237 |
--------------
另一个表用于记录订单的更新次数
---------------------------------------------------
|update_id | order_id | updated_on |
---------------------------------------------------
|1 | 1234 | 2015-10-27 17:57:28
---------------------------------------------------
|2 | 1234 | 2015-10-28 17:57:28
---------------------------------------------------
|3 | 1235 | 2015-12-27 17:57:28
---------------------------------------------------
|4 | 1236 | 2015-12-28 17:57:28
---------------------------------------------------
|5 | 1236 | 2015-12-28 17:57:28
---------------------------------------------------
现在,我想让它为每个订单id显示两种类型的count(),即一种是订单更新的总次数,另一种是今天(2015-10-28)的订单更新次数
非常感谢您在这方面提供的帮助按订单id分组,并进行简单计数,以及更新日期=今天的次数总和
select o.order_id,
count(ou.order_id) updated,
sum(date(updated_date) <=> date(now())) updated_today
from orders o
left join order_update ou on (o.order_id = ou.order_id)
group by o.order_id;
选择o.order\u id,
计数(ou.order_id)已更新,
sum(date(updated_date)date(now())updated_今天
从命令
左连接订单更新ou on(o.order\U id=ou.order\U id)
按订单编号分组;
在这里尝试一下:
您只需更改表名和字段名
SELECT
o.order_id,
COUNT(*),
SUM(IF( CURRENT_DATE() = DATE(l.updated_on),1,0) ) AS updated_today
FROM order o
LEFT JOIN loggin l ON l.order_id = o.order_id
GROUP BY o.order_id;
前几天学过这个,你可以对布尔运算的结果求和。if是多余的。不过,在这种情况下,我们也需要考虑null
IFNULL(总和…,0)
。另外,对联接表行进行计数,否则我们将始终得到更新的计数>=1。但您可以使用“”运算符忽略这一点。选择日期('2015-10-27 10:00:00')当前日期(),空当前日期();
SELECT
o.order_id,
COUNT(*),
SUM(IF( CURRENT_DATE() = DATE(l.updated_on),1,0) ) AS updated_today
FROM order o
LEFT JOIN loggin l ON l.order_id = o.order_id
GROUP BY o.order_id;