2013-03-24 8 views
0

Мне нужно сосчитать все tweets и retweets (все ретвиты также являются твитами) для пользователя в таблице authors. Моя первая мысль работает очень хорошо:Собрать два счетчика с разными условиями

Твиты счетчик

SELECT a.id, a.name, count(*) 
FROM authors AS a 
INNER JOIN tweets AS t 
ON t.fromuser_id = a.id 
GROUP BY a.id, a.name 
ORDER BY count(*) 

ретвитов счетчик

SELECT a.id, a.name, count(*) 
FROM authors AS a 
INNER JOIN tweets AS t 
ON t.fromuser_id = a.id AND retweet = TRUE 
GROUP BY a.id, a.name 
ORDER BY count(*) 

... но теперь я хочу, чтобы положить, что все вместе. Интересно, есть ли лучше (быстрее) способ, чем:

Merged

SELECT a.id, a.name, count(*), (
    SELECT count(*) 
    FROM tweets 
    WHERE fromuser_id = a.id AND retweet = TRUE 
) 
FROM authors AS a 
INNER JOIN tweets AS t 
ON t.fromuser_id = a.id 
GROUP BY a.id, a.name 
ORDER BY count(*) 

ответ

1

Да, есть лучший путь. Использовать условное суммирование:

SELECT a.id, a.name, count(*), 
     sum(case when retweet = true then 1 else 0 end) as retweets 
FROM authors AS a 
INNER JOIN tweets AS t 
ON t.fromuser_id = a.id 
GROUP BY a.id, a.name 
ORDER BY count(*) 
+0

Это работает отлично. Спасибо! – rebeliagamer

1
SELECT a.id, a.name, count(*), 
     SUM(CASE WHEN retweet = TRUE THEN 1 ELSE 0 END) as retweets_count 
FROM authors AS a 
INNER JOIN tweets AS t 
ON t.fromuser_id = a.id 
GROUP BY a.id, a.name 
ORDER BY count(*) 
Смежные вопросы