一、基础概念
首先搞明白3个基础的问题?
1、Dune Analytics是什么?
简单来说是:
1.Dune Analytics团队把区块链上的数据清洗后形成结构化的数据存入数据仓库,然后做了一个工具让有一些SQL基础的人能够按照自己的需求灵活地查询数据。
2.平台还的提供了数据可视化的能力,查出来的数据可以方便地做成做成图以及看板
2、数据仓库是什么?
说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。
注意:
这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计)
也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)
3、SQL是什么?
假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。
类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。
二、数据表长什么样?
你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以我最常用的表为例erc20."ERC20_evt_Transfer"(ERC20代币的转账日志)

表的字段如下
from:从哪个钱包转的币
to:币转到了哪个钱包
value:转了多少币
contract_address:转的哪个币(ERC20代币的合约地址,一般可以在CMC查某一个代币的合约地址)
evt_tx_hash:这笔转账的tx hash是什么
evt_index:这条数据是这个交易的第几笔,1个交易可能存在多笔数据,比如你在uniswap交易你用APE兑换AAVE,可能就会被拆成2笔数据APE→ETH,ETH→AAVE
evt_block_time:交易被打包的时间
evt_block_number:交易被打包的区块高度
三、SQL怎么写?
1.基本结构
SQL最基本的结构或者语法就是
select : 取哪个字段?
from :从哪个表里取?
where :限制条件是什么?
举个🌰,具体的解释见下图
-------代码分割线-------
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\xe6ee69495b571e1042f760d7f34009164aff87a2'
-------代码分割线-------

额外说明一下
关于钱包/合约地址或者是tx hash,实际存到数据库里都做了一层处理:所有的【0x】中的【0】都替换成了【\】
select多个字段用【英文】逗号隔开,SQL中涉及的逗号引号都必须是英文格式,否则会报错
【where】后边如果有多个条件,想多个条件取交集的时候用 【and】连接这些条件,取并集用【or】连接
带引号的from是表里的一个字段名,表名前的from是SQL的语法词
最终查出来的结果见下图,符合上边条件的所有交易数据就只有4条

2.聚合函数
常见的聚合函数
count()
计数,计算符合要求的数据一共有多少行,如果需要按照某个字段去重,比如按照【to】去重,就是count(distinct “to“ )
sum()
求和,比如算孙哥今年以来一共向币安转了多少ETH,就需要用sum()加一下
max()
取最大,比如算孙哥今年以来一共向币安最多一次转了多少ETH,就需要用max()算一下
min()
取最小
avg()
取平均
聚合函数就是在你where限制条件下取出来所有的数据,然后再对他们用函数聚合
这里为了比较好举🌰,这里我们换一个contract_address
-------代码分割线-------
select
"from"
,"to"
,"value"
from erc20."ERC20_evt_Transfer"
where "from" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
and "contract_address" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
-------代码分割线-------
结果如下图:
