Многократное соединение слева с подзапросами возвращает ошибку «Неизвестный столбец»

0

Я пытаюсь получить сводную статистику из таблицы, называемой "актами", в которой хранятся данные о пожертвованиях. В этом процессе я хотел бы получить таблицу со статистикой, касающейся всех пожертвований, неавтоматических пожертвований (DO) и автоматических пожертвований (PA). Для этого я использую два левых соединения (в одной таблице, но с разными предложениями group by).

Мой запрос возвращает следующую ошибку:

Код ошибки: 1054. Неизвестный столбец 'a.yr. в "на оговорку"

Не могли бы вы помочь мне найти решение этой проблемы или предложить другой путь для достижения моей цели? Большое спасибо!

SELECT 
    YEAR(a.act_date)                    AS yr, 
    SUM(a.amount)                       AS sum_all, 
    COUNT(a.amount)                     AS nb_all, 
    AVG(a.amount)                       AS avg_all, 
    COUNT(DISTINCT(a.contact_id))       AS unique_all,
    sum_do,
    nb_do,
    avg_do,
    unique_do,
    sum_pa,
    nb_pa,
    avg_pa,
    unique_pa
FROM
    acts a
LEFT JOIN
    (SELECT 
        YEAR(act_date)                  AS yr_do, 
        SUM(amount)                     AS sum_do, 
        COUNT(amount)                   AS nb_do, 
        AVG(amount)                     AS avg_do, 
        COUNT(DISTINCT(contact_id))     AS unique_do
    FROM
        acts  
    WHERE
        YEAR(act_date) >= 1991 AND
        act_type_id LIKE 'DO'
    GROUP BY
        1) 
    AS donation
ON a.yr = donation.yr_do
LEFT JOIN
    (SELECT 
        YEAR(act_date)                  AS yr_pa, 
        SUM(amount)                     AS sum_pa, 
        COUNT(amount)                   AS nb_pa, 
        AVG(amount)                     AS avg_pa, 
        COUNT(DISTINCT(contact_id))     AS unique_pa
    FROM
        acts 
    WHERE
        YEAR(act_date) >= 1991 AND
        act_type_id LIKE 'PA'
    GROUP BY
        1) 
    AS pa
ON a.yr = pa.yr_pa
WHERE
    YEAR(act_date) >= 1991
GROUP BY
    1;
  • 0
    Вы не можете использовать псевдоним из SELECT в предложении FROM этого SELECT.
  • 0
    Кроме того, теперь, когда я смотрю на ваш запрос во второй раз, вы можете выполнить некоторые поиски здесь по «условной агрегации»; этот тип запроса даже не должен присоединяться.
Показать ещё 1 комментарий
Теги:

1 ответ

0

вы не можете использовать псевдоним в select в том же запросе

менять

ON a.yr = donation.yr_do

в

ON YEAR(a.act_date) = donation.yr_do
  • 0
    Большое спасибо!
  • 0
    Если этот ответ полезен для вас, пометьте его как ответ, чтобы сообщество также могло извлечь из него пользу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню