Присоединение к таблице Sqlite в подзапросах - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь присоединиться к таблице sqlite на основе столбца группировки «год». Я начал с предложения select, которое возвращает все годы в базе данных, и теперь я хочу выполнить запрос одной и той же таблицы для различных статистических данных и присоединиться к ней на основе года. Вот что у меня есть:

select strftime('%Y', `date`, 'unixepoch') as `year` from transactions as t

left join (
    select sum(amount) as `expenses`, 
    strftime('%Y', `date`, 'unixepoch') as `year` from transactions
    where type = -1 and user_id = 1
    group by strftime('%Y', `date`, 'unixepoch')
) as e on e.year = t.year

left join (
    select sum(amount) as `income`, 
    strftime('%Y', `date`, 'unixepoch') as `year` from transactions
    where type = 1 and user_id = 1
    group by strftime('%Y', `date`, 'unixepoch')
) as i on i.year = t.year

group by strftime('%Y', `date`, 'unixepoch');

Когда я пытаюсь выполнить этот оператор sql, я получаю сообщение «нет такого столбца: t.year». Почему я не могу присоединиться на основе псевдонима столбца?

1 Ответ

1 голос
/ 17 февраля 2020

Таблица transactions с псевдонимом t не содержит столбец year (который является производным столбцом). Измените это на:

select strftime('%Y', t.`date`, 'unixepoch') as `year` from transactions as t

left join (
    select sum(amount) as `expenses`, 
    strftime('%Y', `date`, 'unixepoch') as `year` from transactions
    where type = -1 and user_id = 1
    group by strftime('%Y', `date`, 'unixepoch')
) as e on e.year = strftime('%Y', t.`date`, 'unixepoch')

left join (
    select sum(amount) as `income`, 
    strftime('%Y', `date`, 'unixepoch') as `year` from transactions
    where type = 1 and user_id = 1
    group by strftime('%Y', `date`, 'unixepoch')
) as i on i.year = strftime('%Y', t.`date`, 'unixepoch')

group by strftime('%Y', t.`date`, 'unixepoch');

Я предполагаю, что есть другие столбцы из соединенных таблиц, которые вы хотите вернуть, но не в текущем коде. Я думаю, что это то, чего вы хотите достичь:

select 
  strftime('%Y', t.`date`, 'unixepoch') as `year` ,
  sum(case when type = -1 and user_id = 1 then amount end) as `expenses`,
  sum(case when type = 1 and user_id = 1 then amount end) as `income`
from transactions as t
group by strftime('%Y', t.`date`, 'unixepoch');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...