Python-MySQL关联查询需求:统计行数与STATUS值求和
解决方案
需求说明
从msg表获取完整行数据,同时关联Details表计算两个统计值:
STATUS:对应所有关联记录的STATUS字段值之和COUNTS_Rows:对应关联记录的总行数
实现SQL语句
SELECT m.ID, m.APPID, m.Details, COALESCE(SUM(d.STATUS), 0) AS STATUS, COUNT(d.MSGID) AS COUNTS_Rows FROM msg m LEFT JOIN Details d ON m.ID = d.MSGID AND m.APPID = d.APPID AND m.USER = d.USER GROUP BY m.ID, m.APPID, m.Details, m.USER;
语句解释
LEFT JOIN:确保msg表中所有记录都能被返回,即使没有对应的Details记录(此时统计值会通过COALESCE转为0)SUM(d.STATUS):对关联的STATUS字段值求和,满足示例中0+0+1=1的计算需求COUNT(d.MSGID):统计Details表中匹配的记录行数,因MSGID是关联字段,仅当存在匹配记录时非空,计数准确GROUP BY:按msg表的非聚合字段分组,保证每条msg记录对应唯一的统计结果
查询结果
执行语句后将得到如下结果:
| ID | APPID | Details | STATUS | COUNTS_Rows |
|---|---|---|---|---|
| 1 | app1 | test details 1 | 1 | 3 |
| 2 | app2 | test details 2 | 0 | 1 |
内容的提问来源于stack exchange,提问作者Youo.info
相关产品推荐
相关产品推荐

