如何统计GROUP BY分组SQL查询结果的行数(非分组值数量)
统计GROUP BY后SQL查询结果的行数
要统计这段GROUP BY查询的结果行数,有几种简单可行的方法:
- 嵌套子查询统计:把原查询作为子查询,外层用
COUNT(*)直接统计行数,这是最通用的方法,几乎所有数据库都支持:
SELECT COUNT(*) AS 结果总行数 FROM ( SELECT F.BELTAR FROM E_HDFTKP_FORM F INNER JOIN E_HDFTKP_FORM_TABLO3 S ON F.ID = S.FORMID INNER JOIN FLOWDOCUMENTS FD ON F.ID = FD.FILEPROFILEID INNER JOIN LIVEFLOWS LF ON FD.PROCESSID = LF.ID INNER JOIN FLOWSTATUSES FL ON LF.FLOWVERSION = FL.VERSION AND FL.STATUS = LF.STATUS AND FL.PROCESS = LF.PROCESS WHERE F.BELGENO IS NOT NULL AND LF.FLOWSTEP > 1 AND S.HAT2 = 'T101' AND LF.DELETED = 0 GROUP BY F.BELTAR ) AS temp_table
- 窗口函数关联统计:如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用
COUNT(*) OVER()在返回明细的同时,附带显示总行数:
SELECT F.BELTAR, COUNT(*) OVER() AS 总行数 FROM E_HDFTKP_FORM F INNER JOIN E_HDFTKP_FORM_TABLO3 S ON F.ID = S.FORMID INNER JOIN FLOWDOCUMENTS FD ON F.ID = FD.FILEPROFILEID INNER JOIN LIVEFLOWS LF ON FD.PROCESSID = LF.ID INNER JOIN FLOWSTATUSES FL ON LF.FLOWVERSION = FL.VERSION AND FL.STATUS = LF.STATUS AND FL.PROCESS = LF.PROCESS WHERE F.BELGENO IS NOT NULL AND LF.FLOWSTEP > 1 AND S.HAT2 = 'T101' AND LF.DELETED = 0 GROUP BY F.BELTAR
这种方法的好处是不用额外执行一次查询,就能同时看到每个BELTAR值和结果的总条数。
- 工具直接查看:如果用可视化数据库工具(比如DBeaver、Navicat、SSMS),执行原查询后,工具的结果面板通常会直接显示返回的行数,不用修改SQL就能快速获取。
内容的提问来源于stack exchange,提问作者Anıl ÇELEBİ
相关产品推荐
相关产品推荐

