2017-02-22 6 views
3

私はカウントを行いたい、次にcreated_atの日付でグループ化しようとしている3つのカラムを持つユーザのテーブルを持っています。複数のカウントクエリをSQLで結合する

列「のcreated_at」、「answers_count」、「questions_count」

は、どのように私は1つに、これらの3つのクエリを組み合わせて、同じのcreated_atの日付でグループ化されたすべてのカウントを持っているのですか? 3つの別々のクエリhere're

は:

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

どのデータベースを使用していますか? mysqlまたはpostgresql? – scaisEdge

答えて

4

あなたはこれを達成するためにCASESUM()を使用してみてください。あなたがこれを行うにはFILTERcountを使用して試すことができます

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

はこのような何かを試してみてください。

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;