gpt4 book ai didi

mysql - 从 mysql 中获取许多分组值

转载 作者:可可西里 更新时间:2023-11-01 06:33:18 25 4
gpt4 key购买 nike

我有一个这样的表结构:

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)(c-d 列)。大约有。表中有 12 万行。

为了显示每行的项目数,我对每一列使用了一个查询:

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

最佳答案

select 'a' as `column`, a as data, count(*) 
FROM test
group by 'a', a
union
select 'b', b, count(*)
FROM test
group by 'b', b
union
select 'c', c, count(*)
FROM test
group by 'c', c
union
select 'd', d, count(*)
FROM test
group by 'd', d
union
select 'e', e, count(*)
FROM test
group by 'e', e

不知道是否更好,但至少规划器将有机会对其进行优化。

关于mysql - 从 mysql 中获取许多分组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com