MySQL在左连接上重复计算

Hzm*_*zmy 7 mysql sql count left-join

数据库结构

CREATE TABLE installs(
    id INT, PRIMARY KEY(id), 
    created DATETIME)

CREATE TABLE uninstalls(
    id INT, PRIMARY KEY(id),
    created DATETIME,
    install_id INT)
Run Code Online (Sandbox Code Playgroud)

查询("我与MySQL")

SELECT DATE(installs.created),
  COUNT(installs.id),
  COUNT(uninstall.id)
FROM installs
LEFT JOIN uninstalls ON uninstalls.install_id = installs.id
GROUP BY DATE(installs.created)
Run Code Online (Sandbox Code Playgroud)

"预期"输出

DATE(installs.created) | COUNT(installs.id) | COUNT(uninstalls.id) 
  2012-11-20           | *installs on date* | *uninstalls on date*
Run Code Online (Sandbox Code Playgroud)

所以 - 我每天都在查看当天发生的安装/卸载次数.

问题

"安装"的数据每天都是正确的.但是每天"卸载"的数据遗憾地是不正确的.

Ter*_* D. 4

分别计算安装和卸载,并为每个安装和卸载添加一列(零)作为其他计数。然后将两者结合起来UNION,再次按日期分组并取每个日期的最大值(以消除添加的零):

SELECT created as date, max(installs) as installs, max(uninstalls) as uninstalls
FROM
  (SELECT created, count(*) AS installs, 0 AS uninstalls
   FROM installs
   GROUP BY created
  UNION ALL
   SELECT created, 0 AS installs, count(*) AS uninstalls
   FROM uninstalls
   GROUP BY created) c
GROUP BY created
ORDER BY created
Run Code Online (Sandbox Code Playgroud)