1. Основные понятия
Сначала поймите 3 основных вопроса?
1. Что такое Dune Analytics?
Проще говоря, это:
1. Команда Dune Analytics очистила данные в блокчейне, сформировав структурированные данные, и сохранила их в хранилище данных, а затем создала инструмент, позволяющий людям, владеющим некоторыми основами SQL, гибко запрашивать данные в соответствии со своими потребностями.
2. Платформа также предоставляет возможности визуализации данных, а найденные данные можно легко преобразовать в графики и информационные панели.
2. Что такое хранилище данных?
Говоря человеческим языком, это означает, что для нужд статистики данных некоторые данные хранятся в категориях, а носителем хранения является [таблица данных]. Серия [таблиц данных], посвященных определенной теме или темам вместе, представляет собой хранилище данных.
Уведомление:
Данные здесь могут быть данными результатов (например, ежедневной статистикой объема торгов определенной торговой пары с момента выхода Uniswap в Интернет).
Это также могут быть данные процесса (подробности о каждой записи транзакции определенной торговой пары с момента выхода Uniswap в Интернет: кто инициировал ее, обменял A на B, время транзакции, tx_hash, количество транзакций...)
3. Что такое SQL?
Предположим, вы хотите съесть «Хрустящий рисовый шоколад», но в данный момент не можете выйти. Вы звоните мальчику на побегушках и говорите: «Мне нужна коробка шоколадных конфет, а его марка — «Хрустящий рис». Я бегал по делам и ходил в супермаркет, чтобы купить шоколадные конфеты и доставить их тебе домой.
По аналогии, SQL — это то, что вы сказали, а Dune Analytics — мальчик на побегушках. Он позволяет вам общаться с хранилищем данных и перемещать данные из хранилища к вам.
2. Как выглядит таблица данных?
Вы можете думать о таблице как о таблице Excel, в каждой таблице Excel хранятся разные данные. В качестве примера возьмем мою наиболее часто используемую таблицу: erc20."ERC20_evt_Transfer" (журнал передачи токенов ERC20).

Поля таблицы следующие:
from: С какого кошелька переводятся монеты
to: На какой кошелек переводятся монеты
значение: сколько монет было переведено
Contract_address: Какая монета передается (адрес контракта токена ERC20, обычно вы можете проверить адрес контракта определенного токена на CMC)
evt_tx_hash: Каков хеш этой передачи?
evt_index: эти данные представляют собой номер этой транзакции. В одной транзакции может быть несколько фрагментов данных. Например, если вы торгуете APE за AAVE в uniswap, они могут быть разделены на 2 фрагмента данных: APE→ETH, ETH→AAVE. .
evt_block_time: время упаковки транзакции.
evt_block_number: высота блока, в котором упакована транзакция.
3. Как написать SQL?
1. Базовая структура
Самая основная структура или синтаксис SQL:
выберите: Какое поле взять?
из: Из какого стола?
где: Каковы ограничения?
Например 🌰, подробное объяснение смотрите на рисунке ниже.
-------Разделительная линия кода-------
выбирать
"от"
,"к"
,"ценить"
из erc20."ERC20_evt_Transfer"
где "от" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
и "адрес_контракта" = '\xe6ee69495b571e1042f760d7f34009164aff87a2'
-------Разделительная линия кода-------

Дополнительное объяснение
Что касается адреса кошелька/контракта или хэша tx, фактическое хранилище в базе данных подверглось определенной обработке: все [0] в [0x] были заменены на [\]
Выберите несколько полей, разделенных [английскими] запятыми. Запятые и кавычки, используемые в SQL, должны быть в английском формате, иначе будет сообщено об ошибке.
[где] Если позади несколько условий, используйте [и] для соединения этих условий, если вы хотите получить пересечение нескольких условий, и используйте [или] для соединения объединения.
«От» в кавычках — это имя поля в таблице, а «от» перед именем таблицы — это слово синтаксиса SQL.
Конечный результат показан на рисунке ниже. Есть только 4 фрагмента данных транзакции, которые соответствуют вышеуказанным условиям.

2. Функция агрегирования
Общие агрегатные функции
считать()
Посчитайте, посчитайте, сколько строк данных соответствует требованиям. Если вам нужно удалить дубликаты по определенному полю, например [to], то посчитайте(distinct "to").
сумма()
Например, чтобы подсчитать, сколько ETH Brother Sun перевела на Binance в этом году, вам нужно использовать sum() для сложения.
макс()
Возьмите максимум. Например, чтобы подсчитать, сколько ETH Brother Sun переводил на Binance не чаще одного раза в этом году, вам нужно использовать max() для его расчета.
мин()
Минимальный дубль
средн()
средний
Агрегатная функция предназначена для извлечения всех данных под вашими ограничениями, а затем использования функций для их агрегирования.
Для сравнения🌰, давайте поменяем здесь адрес контракта
-------Разделительная линия кода-------
выбирать
"от"
,"к"
,"ценить"
из erc20."ERC20_evt_Transfer"
где "от" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'
и "адрес_контракта" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'
-------Разделительная линия кода-------
Результат такой, как показано ниже:
