2017-02-16 11 views
0

У меня есть таблица под названием «rawTweets», который выглядит следующим образомВложенные Выберите Запросы сгруппированных по дате

tweet, date, id, username, compoundScore 

Я хочу, чтобы рассчитать средние значения для определенных ключевых слов и группировать результаты по дате, но я немного застрял (все еще очень sql 'newb'). В моей голове это выглядит примерно так:

Может использовать небольшое руководство - спасибо!

SELECT 
    `date`, 
    AVG(
     SELECT compoundScore 
     FROM rawTweets 
     WHERE tweet LIKE '%trump%' 
    ) AS Trump, 
    AVG(
     SELECT compoundScore 
     FROM rawTweets 
     WHERE tweet LIKE '%chaffetz%' 
    ) as Chaffetz 
FROM rawTweets 
WHERE 
    compoundScore <> 0.0 
    AND compoundScore IS NOT NULL 
GROUP BY `date`; 

ответ

0

Вместо использования nested select вы делаете, вы можете попробовать это один мат:

SELECT 
    `date`, 
    AVG(COALESCE(rt2.compoundScore, 0)) AS Trump, 
    AVG(COALESCE(rt3.compoundScore, 0)) AS Chaffetz 
FROM 
    rawTweets rt 
    -- Trump 
    LEFT JOIN rawTweets rt2 ON 
     rt2.id = rt.id 
     AND rt2.tweet LIKE '%trump%' 
    -- Chaffetz 
    LEFT JOIN rawTweets rt3 ON 
     rt3.id = rt.id 
     AND rt3.tweet LIKE '%chaffetz%' 
WHERE 
    compoundScore <> 0.0 
    AND compoundScore IS NOT NULL 
GROUP BY `date`; 
0

Вы можете использовать avg и case when сделать это:

select date 
    ,avg(case when tweet like '%trump%' then compoundScore else null end) as Trump 
    ,avg(case when tweet like '%chaffetz%' then compoundScore else null end) as Chaffetz 
from rawTweets 
where compoundScore <> 0.0 and compoundScore is not null 
group by date