sql 子查询

http://www.cnblogs.com/CareySon/archive/2011/07/18/2109406.html

select a.alias, a.name, a.bandwidth, count(b.uuid) as cabinet from resource_idc a LEFT OUTER JOIN resource_cabinet b ON a.uuid=b.idc_uuid GROUP BY b.idc_uuid;
--------+--------------+-----------+---------+
| alias | name         | bandwidth | cabinet |
+-------+--------------+-----------+---------+
| wxxq  | 无锡新区     |     10000 |       4 |
| bjtn  | 北京铜牛     |       400 |       1 |
+-------+--------------+-----------+---------+
select a.uuid, a.alias, a.capacity, a.idc_uuid as idc, count(b.subnet_uuid) as subnet from resource_cabinet a LEFT OUTER JOIN cabinet_subnet b ON a.uuid=b.cabinet_uuid GROUP BY b.cabinet_uuid;
+--------------------------------------+----------+----------+--------------------------------------+--------+
| uuid                                 | alias    | capacity | idc                                  | subnet |
+--------------------------------------+----------+----------+--------------------------------------+--------+
| 073130e9-64a5-47c3-b032-2d254fe43cd2 | wxxq-b1  |       42 | cec27a7a-0bac-4372-8bc4-954b07cefe46 |      1 |
| 09401e18-89b4-4028-9224-a390e3112dfd | bjtn-g17 |       42 | e9465a14-934e-4ca4-b6da-27ac5b8c07a3 |      2 |
| 4f1b18dd-de22-46e5-938e-2c3eb01876fe | wxxq-b2  |       42 | cec27a7a-0bac-4372-8bc4-954b07cefe46 |      1 |
| 9f763b06-4015-4ddf-900a-7560099fc6b8 | wxxq-b3  |       42 | cec27a7a-0bac-4372-8bc4-954b07cefe46 |      1 |
| cc9818b4-7afe-4fdf-b5fb-978a71994786 | wxxq-b4  |       42 | cec27a7a-0bac-4372-8bc4-954b07cefe46 |      1 |
+--------------------------------------+----------+----------+--------------------------------------+--------+
select a.alias, a.name, a.bandwidth, count(b.uuid) as cabinet, sum(b.subnet) as subnet 
from resource_idc as a 
LEFT OUTER JOIN 
(select a.uuid, a.alias, a.capacity, a.idc_uuid, count(b.subnet_uuid) as subnet from resource_cabinet a LEFT OUTER JOIN cabinet_subnet b ON a.uuid=b.cabinet_uuid group by b.cabinet_uuid) as b 
ON a.uuid=b.idc_uuid 
GROUP BY b.idc_uuid;
+-------+--------------+-----------+---------+--------+
| alias | name         | bandwidth | cabinet | subnet |
+-------+--------------+-----------+---------+--------+
| wxxq  | 无锡新区     |     10000 |       4 |      4 |
| bjtn  | 北京铜牛     |       400 |       1 |      2 |
+-------+--------------+-----------+---------+--------+

http://stackoverflow.com/questions/25392770/query-many-to-many-in-sqlalchemy
http://pr8x.com/st/questions/29592559/sqlalchemy-filtering-count-in-many-to-many-relationship-query.html
http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#using-subqueries
http://blog.csdn.net/raptor/article/details/48735159
合并行数据
http://stackoverflow.com/questions/26583832/sqlalchemy-group-concat-and-duplicates
sqlalchemy


@mod.route('/api/idc', methods=['GET'])
def get_idc():
    total = len(Idc.query.all())

    query = Cabinet.query 
        .join(cabinet_subnet) 
        .join(Subnet) 
        .add_columns(Cabinet.uuid, Cabinet.idc_uuid, func.count(Subnet.uuid).label('subnet')) 
        .group_by(Cabinet.uuid).subquery()

    idces = Idc.query 
        .outerjoin(query, (Idc.uuid==query.c.idc_uuid)) 
        .add_columns(Idc.uuid, Idc.name, Idc.alias, Idc.bandwidth) 
        .add_columns(Idc.create_datetime, Idc.update_datetime, Idc.update_man) 
        .add_columns(func.count(query.c.uuid).label('cabinet'), func.sum(query.c.subnet).label('subnet')) 
        .group_by(query.c.idc_uuid) 
        .paginate(int(request.args['page']), int(request.args['limit']), False).items

    rows = [ {'uuid': idc.uuid, 'alias': idc.alias, 'name': idc.name, 'bandwidth': idc.bandwidth, 
                'cabinet': idc.cabinet, 'subnet': str(idc.subnet), 'host': '', 'vhost': '', 'net': '', 'other': '', 
             } for idc in idces ]

    results = {
        'totalCount': total,
        'rows': rows
    }

    return json.dumps(results)
原文地址:https://www.cnblogs.com/liujitao79/p/4991775.html