在一个MySQL查询中获取所有列的不同计数

问题描述 投票:0回答:1

我正在尝试在单个查询中获取所有列的不同计数。考虑下表。

COL1 | COL2 | COL3
A    | 5    | C
B    | 5    | C
C    | 5    | C
C    | 5    | C
D    | 7    | C

预期结果

DC_COL1 | DC_COL2 | DC_COL3     #DC - Distinct count
4       | 2       | 1

尽管使用有效的分组函数无法在单个查询(单个全表扫描)中获得上述结果(AFAIK),但是在此可以进行哪些优化?

对每一列进行单个查询可能会导致对每一列进行全表扫描。尽管在对第一列进行非重复计数查询期间,整个表可能已经到达缓冲池,但是在大表上仍然是性能问题。

mysql count distinct mysql-8.0
1个回答
0
投票

可以在单个表扫描中完成:

SELECT 
  COUNT(DISTINCT COL1) DC_COL1,
  COUNT(DISTINCT COL2) DC_COL2,
  COUNT(DISTINCT COL3) DC_COL3
FROM tablename
© www.soinside.com 2019 - 2024. All rights reserved.