MYSQL数据库中数据按要求汇总

MYSQL数据库中数据按要求汇总,第1张

有时对数据表的 *** 作不是表中数据本身,而是表中数据的汇总,例如

某一列数据的平均值,最大值,最小值等。而对于这些常用的数据汇总处理,MySQL提供了函数来处理。

SQL聚集函数

函数

说明

COUNT()

返回某列的行数

MAX()

返回某列最大值

MIN()

返回某列最小值

AVG()

返回某列平均值

SUM()

返回某列值之和

直连到MySQL的功能现在已被添加到ClickHouse中。所以可以直接从ClickHouse查询MySQL表中的数据。 ClickHouse是一个超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询更快,因此通常情况下在MySQL上进行聚合。 下面是在自己的虚拟环境中做的测试记录。既然是虚拟环境非生产环境,请看参考应用级别,而不是严格的测试。 正确准备和测试大约1000万个数据项。 执行脚本以创建样本数据。这是约500 MB。在MySQL中创建一个表并导入它。 由于似乎字符串数据比数字值更容易汇总,所以内容是数字的,但它们是可变的类型。 然后执行计算 *** 作。 用BLOB类型做GROUPBY似乎很慢。 您可以在ClickHouse上使用MySQL数据,只需在下面的表格中指定它,而不是表名。 启动ClickHouse客户端并进行测试。 如果您在启动时不添加--multiline选项,则不会放置多行查询,因此请继续。SELECT      data1,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data1 ┌─data1─┬─COUNT()─┐ │    4│1999013│ │    3│1998988│ │    2│1999993│ │    5│2001553│ │    1│2000453│ └───────┴─────────┘ 5 rows in set. Elapsed: 2.685 sec. Processed 10.00 million rows,40.00 MB(3.72 million rows/s.,14.90 MB/s.)  SELECT      data2,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data2 ┌─data2─┬─COUNT()─┐ │6    │  999786│ │8    │1001805│ │9    │1001438│ │3    │1000357│ │2    │1000648│ │4    │  998349│ │5    │  998889│ │10    │  999424│ │1    │1000530│ │7    │  998774│ └───────┴─────────┘ 10 rows in set. Elapsed: 2.692 sec. Processed 10.00 million rows,101.00 MB(3.71 million rows/s.,37.52 MB/s.)  SELECT      data3,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data3 -- 结果省略 100000 rows in set. Elapsed: 5.236 sec. Processed 10.00 million rows,138.89 MB(1.91 million rows/s.,26.52 MB/s.)  SELECT      data1,      uniqExact(data5) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data1 ┌─data1─┬─uniqExact(data5)─┐ │    4│          1811674│ │    3│          1812072│ │    2│          1812503│ │    5│          1814106│ │    1│          1813005│ └───────┴──────────────────┘ 5 rows in set. Elapsed: 12.944 sec. Processed 10.00 million rows,198.89 MB(772.55 thousand rows/s.,15.37 MB/s.)  -- ClickHouse有一个函数来粗略计算一个唯一的数字,所以让我们来计算一下。 在MySQL中,相当耗时的查询也可以在很短的时间内处理。 重复统计时,最好将数据复制到ClickHouse一次。 如果您复制它,后续查询将更快。 建议暂时使用StripeLog引擎。 如果您有一个主键,您可能还想要使用MergeTree表。这是在ClickHouse中最常用的引擎。 有必要用ORDER BY指定数据的排序顺序(即使有重复也没有问题)。 我会尝试以前的查询。以下是StripeLog引擎的测试结果。 测试耗时总结如下: 我认为这个错误很大,因为它在VM环境下仅测试了一次 从左边开始为,(1)MySQL中的时间 (2) ClickHouse从MySQL读取和处理数据的时间 (3) 在ClickHouse上处理复制数据的时间。 执行查询 MySQL处理时间 (秒) MySQL->ClickHouse处理时间 (秒) ClickHouse处理时间 (秒) groupby(data1) 3.22 2.685 0.071 groupby(data2) 4.01 2.692 0.177 groupby(data3) 212.82 5.236 0.779 groupby(data1)+uniq(data5) 183.56 12.944 1.725 groupby(data1)+uniq(data5)概算 (无此功能) 6.026 0.285当引用MySQL数据时,如果没有对应于ClickHouse的类型,它似乎是String类型。 没有相应的类型如Decimal类型,所以它也是String类型。 如果你想把它作为一个数值,精度将会改变,但是似乎有必要在MySQL端保持Double类型。 而且,Date和DateTime类型在MySQL和ClickHouse之间的范围也是不同的。 ClickHouse日期类型是1970 - 2038年之间。 如果有超出范围的数据,可能需要使其成为字符串类型,按年份,月份,日期分列,并将其作为数值复制。 参照源码如下:https://github.com/yandex/ClickHouse/blob/9965f5e357f1be610608a51dc7a41f89c2321275/dbms/src/TableFunctions/TableFunctionMySQL.cpp#L37MySQL类型 ClickHouse 类型 参考 tinyint    UInt8 / Int8 smallint    UInt16 / Int16 int / mediumint    UInt32 / Int32 bigint    UInt64 / Int64 float    Float32 double    Float64 dateDate    有可以表达的范围差异 datetime    DateTime有可以表达的范围差异 timestamp    DateTime binaryFixed    String 除上述以外    String

一般可用Group 子句+ SQL聚合函数获取分类汇总信息

例如下列分组汇总SQL语句,返回本月每个产品类别的销售总金额:

select 产品类别,sum(单价*数量) as 销售金额 from 销售记录

where Date_Format(销售日期,'%Y%m')=Date_Format(now(),'%Y%m')

group by 产品类别


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8652037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存