我有一个这样的表结构:
CREATE TABLE `test` (
`a` tinyint(3) unsigned DEFAULT 0,
`b` tinyint(3) unsigned DEFAULT 0,
`c` tinyint(3) unsigned DEFAULT 0,
`d` tinyint(3) unsigned DEFAULT 0,
`e` tinyint(3) unsigned DEFAULT 0
);
这有大约 30 列,其中一些列的值从 0-200 (a,b) 和一些只有 5 个值 (0,1,2,3,4)(列 cd)。大约有。表中有 120k 行。
为了显示每行的项目数,我对每一列使用查询:
select a, count(*) FROM test group by a;
select b, count(*) FROM test group by b;
select c, count(*) FROM test group by c;
select d, count(*) FROM test group by d;
select e, count(*) FROM test group by e;
这样做的问题是它将触发 30 个查询(每列一个),并且每次基本上都会遍历同一组数据。
有一个更好的方法吗?
我已经尝试过使用 GROUP BY WITH ROLLUP 但这会导致结果集比每个单独的查询处理得慢。
您可以查看 SQLfiddle 上的数据选择:http ://sqlfiddle.com/#!2/a9fd8/1