Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的多重计数和分组_Mysql - Fatal编程技术网

MySQL中的多重计数和分组

MySQL中的多重计数和分组,mysql,Mysql,我有一个带有2个不同表的db,1用于以下结构的订单详细信息: -------------- |order_id | -------------- |1234 | -------------- |1235 | -------------- |1236 | -------------- |1237 | -------------- 另一个表用于记录订单的更新次数 ------------------------------------------

我有一个带有2个不同表的db,1用于以下结构的订单详细信息:

--------------
|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;