gpt4 book ai didi

mysql - 预先计算每个可能组合的记录数

转载 作者:行者123 更新时间:2023-11-29 09:26:24 26 4
gpt4 key购买 nike

我有一个 mySQL 数据库表,其中包含如下手机信息:

ID   Brand   Model  Price Type   Size
==== ===== ===== ===== ====== ====
1 Apple A71 3128 A 40
2 Samsung B7C 3128 B 20
3 Apple ZX5 3128 A 30
4 Huawei Q32 2574 B 40
5 Apple A21 2574 A 25
6 Apple A71 3369 A 30
7 Samsung A71 7413 C 40

现在我想创建另一个表,其中包含每个可能的参数组合的计数。

Params                                         Count  
============================================== =======
ALL 1000000
Brand(Apple) 20000
Brand(Apple,Samsung) 40000
Brand(Apple),Model(A71) 7100
Brand(Apple),Type(A) 6000
Brand(Apple),Model(A71,B7C),Type(A,B) 7
Model(A71) 12514
Model(A71,B7C) 26584
Model(A71),Type(A) 6521
Model(A71),Type(A,B) 8958
Model(A71),Type(A,B),Size(40) 85

对于每种可能的组合,依此类推。我正在考虑创建一个存储过程(我会定期执行),它将对每个现有条件执行查询,但我有点不知道它到底应该是什么样子。或者有更好的方法来做到这一点吗?

编辑:我想要存储这样的信息的原因是能够在客户端应用程序的过滤器中显示结果数量,如图所示。

showing number of results

我想在Params列上创建索引,以便能够立即获取Count给定散列的数字,提高性能。

我也尝试过动态查询和缓存值,但我也想尝试这种方法,这样我就可以比较哪种方法更有效。

这就是我现在计算计数的方式:

SELECT COUNT(*) FROM products;
SELECT COUNT(*) FROM products WHERE Brand IN ('Apple');
SELECT COUNT(*) FROM products WHERE Brand IN ('Apple', 'Samsung');
SELECT COUNT(*) FROM products WHERE Brand IN ('Apple') AND Model IN ('A71');

等等

最佳答案

您可以为此使用ROLLUP

SELECT 
model, type, size, COUNT(*)
FROM mytab
GROUP BY 1, 2, 3
WITH ROLLUP

根据您的示例数据,我们得到以下信息:

| model | type | size | COUNT(*) |
| ----- | ---- | ---- | -------- |
| A21 | A | 25 | 1 |
| A21 | A | | 1 |
| A21 | | | 1 |
| A71 | A | 30 | 1 |
| A71 | A | 40 | 1 |
| A71 | A | | 2 |
| A71 | C | 40 | 1 |
| A71 | C | | 1 |
| A71 | | | 3 |
| B7C | B | 20 | 1 |
| B7C | B | | 1 |
| B7C | | | 1 |
| Q32 | B | 40 | 1 |
| Q32 | B | | 1 |
| Q32 | | | 1 |
| ZX5 | A | 30 | 1 |
| ZX5 | A | | 1 |
| ZX5 | | | 1 |
| | | | 7 |

小计存在于不同列中具有空值的行中,总计是所有分组依据列都为空的最后一行。

关于mysql - 预先计算每个可能组合的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535551/

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