Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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-左连接中出现错误1064_Mysql_Join_Left Join - Fatal编程技术网

MySQL-左连接中出现错误1064

MySQL-左连接中出现错误1064,mysql,join,left-join,Mysql,Join,Left Join,我目前正在尝试仅使用MySQL查询来格式化数据。我不想用编程语言来操纵它。所有操作仅在一个表上完成 我的问题是: SELECT DATE(datetime_column) AS date, COUNT(`id`) AS users_a FROM users a WHERE datetime_column >= '2017-12-01' GROUP BY DATE(datetime_column), rank HAVING rank = "good" LEFT J

我目前正在尝试仅使用MySQL查询来格式化数据。我不想用编程语言来操纵它。所有操作仅在一个表上完成

我的问题是:

    SELECT DATE(datetime_column) AS date, COUNT(`id`) AS users_a FROM users a 
    WHERE datetime_column >= '2017-12-01' GROUP BY DATE(datetime_column), rank HAVING rank = "good"

    LEFT JOIN (SELECT DATE(datetime_column) AS date, COUNT(`id`) AS users_b FROM users
    WHERE datetime_column >= '2017-12-01' GROUP BY DATE(datetime_column), rank HAVING rank = "bad") AS b 
    ON b.date = a.date;
输出应如下所示:

date users_a users_b 2017-12-01 17 20 2017-12-02 4 9 如果这两个查询单独执行,它们会给出准确的结果,我只希望数据位于一个表中。但是,我得到以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN (SELECT DATE(datetime) AS date, COUNT(`id`) AS users_b FROM ' at line 2 试试这个

SELECT DATE(datetime_column) date, SUM(CASE WHEN rank = "good" THEN 1 END) users_a, SUM(CASE WHEN rank = "bad" THEN 1 END) users_b
FROM users
WHERE datetime_column>= '2017-12-01'
GROUP BY DATE(datetime_column)
联接必须在HAVING子句之前发生

根据MySQL选择:

此外,您还可以将其简化为:

SELECT
    DATE(`datetime_column`) AS `date`, 
    SUM(IF(`rank` = 'good', 1, 0)) AS `users_a`,
    SUM(IF(`rank` = 'bad', 1, 0)) AS `users_b`
FROM
    `users`
WHERE
   datetime_column >= '2017-12-01'
GROUP BY
    DATE(datetime_column)

这会为每个“好”用户增加一列用户,为每个“坏”用户增加一列用户。

我喜欢这个简洁完美的解决方案!谢谢你,谢谢你的帮助。很好
SELECT
    DATE(`datetime_column`) AS `date`, 
    SUM(IF(`rank` = 'good', 1, 0)) AS `users_a`,
    SUM(IF(`rank` = 'bad', 1, 0)) AS `users_b`
FROM
    `users`
WHERE
   datetime_column >= '2017-12-01'
GROUP BY
    DATE(datetime_column)