mysql 是否返回多个表联接中所有行的总计数?

csga3l58  于 2022-12-10  发布在  Mysql
关注(0)|答案(3)|浏览(121)

我连接了多个表,并很好地返回所有列。现在我想返回所有行的总计数

select(Transaction.id, func.count(Transaction.id)).label('count_1'))
        .join(TransactionType).join(xxx).group_by(Transaction.id)

它返回如下所示的SQL:

SELECT transaction.id, count(transaction.id) AS count_1 
FROM transaction INNER JOIN xxx ON xxx.`xId` = transaction.`xId` INNER JOIN 
transaction_type ON transaction_type.id = transaction.`transaction_type` GROUP BY transaction.id

但是,这样做只是为每一行返回count_1作为1。我原以为它会返回所有行的计数。如果我不使用group_by,那么它会抱怨,但我怀疑这就是为什么会发生这种情况。
如何才能获得SQLalChemy/SQLModel中的总行计数?

eyh26e7m

eyh26e7m1#

我想是因为结尾处的括号打错了。标签应该是用于函数的。计数如下。

select(Transaction.id, func.count(Transaction.id).label('count_1')) # look where .label is applied.
    .join(TransactionType).join(xxx).group_by(Transaction.id)
8qgya5xd

8qgya5xd2#

结果只是抓住了len(session.exec(sql).all())的长度

gojuced7

gojuced73#

我也有过类似的情况。我使用的是异步请求。
以下解决方案适用于我在SQLModel中的工作:

# Import func tool 
from sqlmodel import select, func

#sqlmodel query
statement = select(func.count(Model_1.id)).where(
        Model_1.column_1 == Model_2.matching_column,
        Model_1.column_2 == "some_value_1" ,
        Model_2.column_2 == "some_value_2",
    )
#execute query (asynchronous request)
result_object = await session.exec(statement)
count = result_object.one() # this will return the value eg: 100
count = result_object.all() # this will return result as a list eg: [100]

希望这能有所帮助。!

相关问题