SA code: session.query(User).order_by(desc(select([func.count(1)], user_subscriptions_table.c.subscriber_id==users_table.c.user_id))) mysql> select * from user_subscriptions; +---------+---------------+ | user_id | subscriber_id | +---------+---------------+ | 10008 | 10012 | | 10009 | 10012 | | 10012 | 10008 | | 10010 | 10008 | | 10011 | 10008 | +---------+---------------+ This is wrong! (Generated by SQL Alchemy): mysql> SELECT tg_user.user_id from tg_user ORDER BY (SELECT count(1) FROM user_subscriptions, tg_user WHERE user_subscriptions.subscriber_id = tg_user.user_id) DESC; +---------+ | user_id | +---------+ | 1 | | 10000 | | 10001 | | 10002 | | 10003 | | 10004 | | 10005 | | 10006 | | 10007 | | 10008 | | 10009 | | 10010 | | 10011 | | 10012 | +---------+ 14 rows in set (0.00 sec) THIS IS CORRECT (self made query): mysql> SELECT tg_user.user_id from tg_user ORDER BY (SELECT count(1) FROM user_subscriptions WHERE user_subscriptions.subscriber_id = tg_user.user_id) DESC; +---------+ | user_id | +---------+ | 10008 | | 10012 | | 10011 | | 10010 | | 10009 | | 10007 | | 10006 | | 10005 | | 10004 | | 10003 | | 10002 | | 10001 | | 10000 | | 1 | +---------+ 14 rows in set (0.10 sec)