2017-12-04 21 views
0

현재 MySQL 쿼리 만 사용하여 포맷 된 데이터를 가져 오려고합니다. 프로그래밍 언어를 사용하여 조작하고 싶지 않습니다. 모든 작업은 하나의 테이블에서만 수행됩니다. 그들은 개별적으로 실행되는 경우MySQL - 왼쪽에있는 오류 # 1064

 
date   users_a   users_b 
2017-12-01  17    20 
2017-12-02  4     9 

두 쿼리는 정확한 결과를, 난 그냥 데이터가 될하려는 : 같은

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; 

이 출력이되어야한다 : 여기

내 쿼리입니다 하나의 테이블. 그러나, 나는 다음과 같은 오류가 발생합니다 :

 
#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 

답변

0

JOINsHAVING 절 전에 발생해야보십시오. MySQL의 SELECTdocumentation

: 모든 '좋은'사용자에 대한 users_a 열을 증가

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) 

users_b에 대한 :

SELECT 
    [ALL | DISTINCT | DISTINCTROW ] 
     [HIGH_PRIORITY] 
     [STRAIGHT_JOIN] 
     [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 
     [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] 
    select_expr [, select_expr ...] 
    [FROM table_references 
     [PARTITION partition_list] 
    [WHERE where_condition] 
    [GROUP BY {col_name | expr | position} 
     [ASC | DESC], ... [WITH ROLLUP]] 
    [HAVING where_condition] 
    [ORDER BY {col_name | expr | position} 
     [ASC | DESC], ...] 
    [LIMIT {[offset,] row_count | row_count OFFSET offset}] 
    [PROCEDURE procedure_name(argument_list)] 
    [INTO OUTFILE 'file_name' 
     [CHARACTER SET charset_name] 
     export_options 
     | INTO DUMPFILE 'file_name' 
     | INTO var_name [, var_name]] 
    [FOR UPDATE | LOCK IN SHARE MODE]] 

게다가, 당신은 또한 같은으로 단순화 할 수 모든 '나쁜'.

+0

나는이 솔루션을 좋아한다. 고맙습니다. –

0

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) 
+0

도움 주셔서 감사합니다. 잘 했어 –