2017-02-22 23 views
3

У меня есть таблица пользователя с 3 столбцами, которые я пытаюсь сделать, а затем группирую по дате created_at.объединение нескольких запросов счетчика в sql

столбцы: «created_at», «answers_count», «questions_count»

Как объединить эти 3 запросы в один и есть все счетчики, сгруппированные по одной и той же датой created_at?

here're 3 отдельных запросов:

-- daily new signups 
SELECT date_trunc('day', users.created_at) AS signup_date, count(*) AS new_users 
FROM users 
GROUP BY signup_date 
ORDER BY signup_date DESC; 

-- new user answers_count by signup date 
SELECT date_trunc('day', users.created_at) AS signup_date, count(*) AS answers_count 
FROM users 
WHERE users.answers_count > 0 
GROUP BY signup_date 
ORDER BY signup_date DESC; 

-- new user questions_count by signup date 
SELECT date_trunc('day', users.created_at) AS signup_date, count(*) AS qs_received 
FROM users 
WHERE users.questions_count > 0 
GROUP BY signup_date 
ORDER BY signup_date DESC; 
+1

который db вы используете ..? mysql или postgresql? – scaisEdge

ответ

4

Вы должны попробовать использовать SUM() с CASE для достижения этой цели.

попробовать что-то вроде этого:

SELECT date_trunc('day', users.created_at) AS signup_date, 
    count(*) AS new_users, 
    sum(case when answers_count > 0 then 1 else 0 end) as answers_count, 
    sum(case when questions_count > 0 then 1 else 0 end) as qs_received, 
FROM users 
GROUP BY signup_date 
ORDER BY signup_date DESC; 
+0

удивительный. это сработало. благодаря! – LeoAlmighty

1

Вы можете попробовать использовать count с FILTER, чтобы сделать это.

SELECT date_trunc('day', users.created_at) AS signup_date, 
    count(*) AS new_users, 
    count(*) FILTER (WHERE answers_count > 0) as answers_count, 
    count(*) FILTER (WHERE questions_count > 0) as qs_received, 
FROM users 
GROUP BY signup_date 
ORDER BY signup_date DESC;