I have a table in my database with four columns: ID, task_name, due_date, completed_date
I am trying to use a subquery as one of output columns. Here is the SQL, which works fine:
SELECT
due_date AS date,
COUNT(id) AS tasks_due,
( SELECT COUNT(id) FROM task_data WHERE completed_date IS NOT NULL AND due_date = T.due_date ) as tasks_completed,
FROM task_data T
GROUP BY date
ORDER BY date
The issue I am having is trying getting translate this bit into a SQLAlchemy query due_date = T.due_date
UPDATE I've managed to work it out. Code below, for anyone who is interested.
completed_tasks = (db.session.query(
Task.due_date, db.func.count(Task.id).label('tasks_completed'))
.filter(Task.completed_date != None)
.group_by(Task.due_date).subquery()
)
task_query = (db.session.query(
Task.due_date.label('date'),
db.func.count(Task.id).label('tasks_due'),
completed_tasks.c.tasks_completed.label('tasks_completed'))
.outerjoin(completed_tasks, Task.due_date == completed_tasks.c.due_date)
.group_by(Task.due_date, completed_tasks.c.tasks_completed)
.order_by(Task.due_date)
)