2015-04-08 3 views
0

У меня есть математический код, который требует двух подзапросов. Ниже приведена копия кода.Виды из нескольких подзапросов MYSQL

SELECT AVGTEMP_X.Average_Temp, ProduceMonAvg.Avergae_CPI, 
SUM(AVGTEMP_X.Average_Temp) as AVGTEMPSUM, 
SUM(ProduceMonAvg.Average_CPI) as PROCPISUM, 
SUM(AVGTEMP_X.Average_Temp*AVGTEMP_X.Average_Temp) AS AVGTEMPSQ, 
SUM(ProduceMonAvg.Average_CPI*ProduceMonAvg.Average_CPI)PROCPISQ, 
SUM(AVGTEMP_X.Average_Temp*ProduceMonAvg.Average_CPI) AS PowerSum, 
COUNT(*) as COUNT, 
(COUNT*(PowerSum)-(AVGTEMPSUM))/(sqrt(COUNT*(AVGTEMPSQ)-pow(AVGTEMPSUM,2)* 
    (COUNT*(PROCPISQ)-pow(PROCPISUM,2)))) AS Correlation 
FROM(SELECT series_id,FORMAT(AVG(value),2) AS Average_CPI, period 
FROM CURRENT 
WHERE series_id = 'CUSR0000SEFK' 
AND theYear >=(1997) 
AND theYear <=(2010) 
GROUP BY period) AS ProduceMonAvg, 
(SELECT Average_Temp 
FROM AVGTEMP_X) 
INNER JOIN ProduceMonAvg 
ON AVGTEMP_X.period = ProduceMonAvg.period 

Я получаю сообщение об ошибке говорящее

1146 - Table 'xxx.ProduceMonAvg' не существует

1054 - Неизвестный столбец 'COUNT' в 'списке поля'

ответ

0

В вашем внешнем запросе вы ссылаетесь на ProdcueMonAvg.Average_CPI и т. Д. В своем внутреннем запросе вы используете его как AS ProduceMonAvg. обратите внимание на опечатку - Prodcue vs Produce. Вы уверены, что ваша ошибка не указана Table xxx.ProdcueMonAvg doesn't exist?

В этом отношении есть еще несколько вещей, которые не соответствуют вашему запросу. Ваше соединение с запросом AVGTEMP_X использует подзапрос, в котором он не нужен, он также выполняет перекрестное соединение, а THEN - внутреннее соединение. Я сомневаюсь, что это то, чего вы хотели. Попробуйте этот вариант:

SELECT AVGTEMP_X.Average_Temp, 
    ProduceMonAvg.Average_CPI, 
    SUM(AVGTEMP_X.Average_Temp) AS AVGTEMPSUM, 
    SUM(ProduceMonAvg.Average_CPI) AS PROCPISUM, 
    SUM(AVGTEMP_X.Average_Temp * AVGTEMP_X.Average_Temp) AS AVGTEMPSQ, 
    SUM(ProduceMonAvg.Average_CPI * ProduceMonAvg.Average_CPI) PROCPISQ, 
    SUM(AVGTEMP_X.Average_Temp * ProduceMonAvg.Average_CPI) AS PowerSum, 
    COUNT(*) AS TOTAL, 
    (COUNT(*) * (SUM(AVGTEMP_X.Average_Temp * ProduceMonAvg.Average_CPI)) - (SUM(AVGTEMP_X.Average_Temp)))/(sqrt(COUNT(*)* (SUM(AVGTEMP_X.Average_Temp * AVGTEMP_X.Average_Temp)) - pow(SUM(AVGTEMP_X.Average_Temp), 2) * (COUNT(*)* (SUM(ProduceMonAvg.Average_CPI * ProduceMonAvg.Average_CPI)) - pow(SUM(ProduceMonAvg.Average_CPI), 2)))) AS Correlation 
FROM (
    SELECT series_id, 
     FORMAT(AVG(value), 2) AS Average_CPI, 
     period 
    FROM CURRENT 
    WHERE series_id = 'CUSR0000SEFK' 
     AND theYear >= (1997) 
     AND theYear <= (2010) 
    GROUP BY period 
    ) AS ProduceMonAvg 
INNER JOIN AVGTEMP_X ON AVGTEMP_X.period = ProduceMonAvg.period 

Я также создал некоторые макеты таблиц и данных и, наконец, проверил запрос. Он возвращает результаты. Вы можете увидеть его здесь: http://sqlfiddle.com/#!9/47523/14

+0

Опечатки были исправлены до этого. Я буду обновлять код. –

+0

@AndrewHernandez Даже после исправления, он все еще содержит опечатки. 'ON AVGTEMP_X.period = ProdcueMonAvg.period' для вашего предиката соединения –

+0

Да, для меня была длинная рабочая неделя, и опечатки меня убивают. ВСЕ БЫЛИ ФИКСИРОВАНЫ СЕЙЧАС –

Смежные вопросы