Аналіз мікроструктури ринку 29 червня 2026
Детальний аналіз стрічки угод та котирувань за 29 червня 2026 року: виправлення обсягу за словником та дані FINRA для глибокого аналізу ринку.
Це технічне доповнення до огляду ринку за 29 червня 2026 року: необроблені дані, що стоять за хвилинними графіками — 156.1 мільйонів окремих угод та 505.38 мільйонів оновлень котирувань NBBO за одну звичайну понеділкову сесію. Кожне число є результатом збереженого запиту (розгорніть будь-яку панель, щоб побачити точний SQL), а два головні висновки дня представлені у повному форматі: виправлення обсягу, якого вимагає словник коду стрічки, та файл постачальника, який безпосередньо зупиняється на літері S.
Торгова стрічка, транзакція за транзакцією
Спочатку перевірка сесії, ніколи не припускайте зворотного: календар вихідних днів біржі містить 0 рядків на 29 червня 2026 року, а SPY зафіксував рівно 390 хвилинних барів у межах регулярної торгової сесії — повний сеанс з 9:30 до 16:00 за нью-йоркським часом. Протягом подовженого дня консолідована стрічка зафіксувала 156.1 мільйонів окремих угод.
Точний SQL-код для кожного числа
WITH
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-06-29') AS holiday_rows,
(
SELECT countIf(window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'
) AS spy_bars
SELECT
holiday_rows AS holiday_rows_jun29,
spy_bars AS spy_regular_session_bars,
round(count() / 1e6, 1) AS trades_m,
round(100.0 * countIf(size < 100) / count(), 2) AS odd_lot_pct_of_trades,
round(100.0 * toFloat64(sumIf(size, size < 100)) / toFloat64(sum(size)), 2) AS odd_lot_pct_of_shares,
multiIf(
countIf(size <= 19) >= 0.5 * count(), 19,
countIf(size <= 20) >= 0.5 * count(), 20,
countIf(size <= 21) >= 0.5 * count(), 21,
countIf(size <= 22) >= 0.5 * count(), 22,
countIf(size <= 23) >= 0.5 * count(), 23,
0) AS median_print_shares,
round(countIf(size = 1) / 1e6, 1) AS one_share_trades_m,
round(100.0 * countIf(size != round(size)) / count(), 2) AS fractional_pct_of_trades
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'72.61% усіх транзакцій були неповними лотами — угодами об менше ніж 100 акцій — проте вони охопили лише 8.79% від загальної кількості акцій — нескоригований загальний обсяг, який відсікається в розділі аналізу обсягів нижче. Медіанна транзакція становила 21 акцій, виміряна за допомогою самоперевірочного діапазонного зонду — кумулятивні підрахунки від 19 до 23 акцій — який повертає 0, якщо діапазон не збігається, і має обмеження, щоб пропуск не впливав на результат. 17.9 мільйонів транзакцій були рівно на одну акцію, а 4.73% мали дробні розміри — патерн, характерний для роздрібних застосунків, що подають заявки на стрічку по одній частині, коли маркетмейкери приймають іншу сторону.
Аналіз обсягів: отримання "відповідного обсягу" з довідника
Якщо додати значення поля size для кожної угоди, то за 29 червня обсяг торгів складе 24.79 мільярдів акцій. Цей показник є помилковим, про що свідчить сама стрічка угод. Кожна угода містить коди умов, а SIP — Securities Information Processor, який об'єднує дані з усіх торгових майданчиків в один потік — публікує довідник, де для кожного коду вказано, чи оновлює він консолідований обсяг. Деякі повідомлення є адміністративними повторними трансляціями обсягів, які вже були враховані один раз. Замість жорсткого кодування списку "відомих" кодів, цей пост виводить набір виключень безпосередньо з довідника:
Точний SQL-код для кожного числа
SELECT
count() AS excluded_codes,
sum(id) AS excluded_id_checksum,
arrayStringConcat(arraySort(groupArray(concat(toString(id), ' ', name))), ' · ') AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND JSONExtractBool(update_rules, 'consolidated', 'updates_volume') = 03 умов продажу мають параметр updates_volume = false у консолідованому потоці: 15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market). Ось висновок: у попередньому варіанті щоденного звіту коди 15 та 16 — два офіційні повідомлення про відкриття/закриття, згадані в кожному посібнику з даних — були прописані вручну, при цьому код 38 був повністю пропущений. Джерелом істини є довідник, а не заучений список кодів.
Використання двох блоків є навмисним: скалярний підзапит до довідника під час сканування 156.1 мільйонів рядків перевищує наше обмеження у 30 секунд. Тому верхній блок визначає набір як один рядок — з обмеженням за кількістю кодів та контрольною сумою id (69), — а нижній блок застосовує отримані літерали. Якщо дані в довіднику зміняться, контрольна сума дозволить виявити це при перегляді; літерали ніколи не стануть неактуальними без відома користувача.
Точний SQL-код для кожного числа
SELECT
round(toFloat64(sum(size)) / 1e9, 2) AS raw_shares_bn,
round(toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS matched_shares_bn,
round(toFloat64(sumIf(size, hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS excluded_shares_bn,
countIf(hasAny(conditions, [15, 16, 38])) AS excluded_prints
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Виправлений облік: 24.79 мільярдів акцій сирих даних, 20.66 мільярдів, врахованих SIP, 4.13 мільярдів виключено серед 91175 адміністративних угод. Одне точне визначення: "відповідний обсяг" (matched volume) — це обсяг, який власні правила умов SIP включають до консолідованого підсумку — і нічого більше. Ми не оцінюємо економічну значущість угод; ми застосовуємо правила обліку самої стрічки угод.
Розшифровка найбільших транзакцій
Найбільші транзакції дня — це випадки, коли коди умов перестають бути просто технічними даними:
Точний SQL-код для кожного числа
SELECT
ticker,
formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') AS et_time,
round(toFloat64(size) / 1e6, 2) AS shares_m,
toFloat64(price) AS price,
round(toFloat64(size) * toFloat64(price) / 1e6, 1) AS notional_usd_m,
round(100 * (toFloat64(size) * toFloat64(price)) / max(toFloat64(size) * toFloat64(price)) OVER (), 1) AS pct_of_biggest_dollar_print,
arrayStringConcat(arrayMap(c -> toString(c), conditions), ', ') AS condition_id
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
AND size >= 10000000
AND NOT hasAny(conditions, [15, 16, 38])
ORDER BY size DESC
LIMIT 10Розглянемо перші рядки як приклад. Найбільша транзакція дня — 61.69 мільйонів акцій CAG (Conagra) за ціною $13.98, що становить приблизно $862.5 мільйонів, зафіксована 16:04:53 ET під кодами 8, 41 (8 Closing Prints, 41 Trade Thru Exempt) — це результат закринчування аукціону NYSE, опублікований після 16:00. Вона враховується в обсязі лише один раз. Ці ж 61.69 мільйонів акцій знову з'являються під кодом 15 (Market Center Official Close): це повторне звітування, яке словник виключає, що є частиною вилучених вище 4.13 мільярдів. Рядок з кодом 15 навмисно видалено з наведеної вище таблиці, тому його отримання винесено в окрему панель:
Точний SQL-код для кожного числа
SELECT
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS auction_print_shares_m,
round(toFloat64(maxIf(size, has(conditions, 15))) / 1e6, 2) AS official_close_reprint_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8))) - toFloat64(maxIf(size, has(conditions, 15))), 2) AS share_difference,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, size, has(conditions, 15)), 'America/New_York'), '%H:%i:%S') AS reprint_et,
argMaxIf(exchange, size, has(conditions, 15)) AS reprint_exchange_id,
countIf(has(conditions, 15)) AS cag_code15_prints
FROM global_markets.stocks_trades
WHERE ticker = 'CAG'
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Найбільша з 6 повідомлень про офіційне закриття по CAG становить 61.69 мільйонів акцій — рівно 61.69 мільйонів за аукціоном (різниця: 0), зафіксована 16:04:53 ET від ідентифікатора біржі 10, NYSE у довіднику акцій: це переказ результатів власного аукціону біржею, що здійснює лістинг.
Інші CAG рядків належать до іншої категорії — транзакція обсягом 15.17 мільйонів акцій під кодами 12, 2 (12 Form T / extended hours, 2 Average Price Trade) та ще дві під кодом 12 є пост-аукціонними транзакціями, що звітуються через FINRA, чиї умови мають параметр updates_volume = true. SIP розглядає їх як реальні транзакції, як і наш відповідний показник.
В іншому місці код 9 позначає закринчування Nasdaq — транзакція NVDA на $3389.5 мільйонів є найбільшою в таблиці за вартістю, а коди у транзакції SNAP (53, 41) включають 53 (Qualified Contingent Trade).
Час: десять хвилин визначають день
Якщо розглядати дані з хвилинною точністю, торгова стрічка зосереджена майже повністю на межах сесії:
Точний SQL-код для кожного числа
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 10За хвилину 15:59 ET було зафіксовано 3.98 мільйонів угод — понад шістьдесят тисяч на секунду. Чи всі інші інструменти з першої десятки зосереджені на відкритті та закритті, можна визначити за одним показником:
Точний SQL-код для кожного числа
SELECT
countIf(NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS entries_outside_open_close,
countIf(et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00') AS entries_in_open_close,
maxIf(et_minute, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_minute,
maxIf(trades_m, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_trades_m
FROM (
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 10
)9 з десяти інструментів торгуються протягом перших десяти хвилин або останніх десяти хвилин перед закриттям. Єдиний виняток — 10:15 ET, сплеск у 0.88 мільйонів угод — є справжньою аномалією середини ранку; причина цього явища не зрозуміла з наявних даних, тому ми не будемо її вигадувати. Цей самий час знову з'явиться нижче.
Потік котирувань: пів мільярда оновлень
National Best Bid and Offer — найкраща ціна купівлі та продажу на всіх біржах, що перераховується щоразу при зміні будь-якої з них — оновився 505.38 мільйонів разів 29 червня, при 156.1 мільйонах угод.
Точний SQL-код для кожного числа
WITH
(
SELECT (round(countIf(ticker = 'QQQ') / 1e6, 2), round(countIf(ticker = 'NVDA') / 1e6, 2),
round(countIf(ticker = 'AAPL') / 1e6, 2), round(countIf(ticker = 'TSLA') / 1e6, 2))
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
) AS pinned
SELECT
round(count() / 1e6, 2) AS updates_m,
pinned.1 AS qqq_updates_m,
pinned.2 AS nvda_updates_m,
round(pinned.1 - pinned.2, 2) AS qqq_minus_nvda_updates_m,
round(pinned.2 - greatest(pinned.3, pinned.4), 2) AS nvda_minus_next_single_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'В індексних продуктах спостерігається перевага в котируванні: лише QQQ зафіксував 5.23 мільйонів оновлень проти 1.8 мільйонів для NVDA, найбільш котованої акції серед перевірених нами активів — 0.67 мільйонів оновлень переваги над наступною акцією. Повний перелік усіх лістингів за кожним тікером не вміщується в 30-секундний ліміт, тому наведений нижче рейтинг є перевіреним набором даних, а не вичерпним списком:
Точний SQL-код для кожного числа
SELECT ticker, round(count() / 1e6, 2) AS updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'SPY', 'TQQQ', 'IWM', 'SQQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY ticker
ORDER BY updates_m DESCQQQ очолив перевірений набір із 5.23 мільйонами оновлень; лідерами списку є індексні фонди та їхні кредитні аналоги, а не звичні для широкого загалу акції.
SPY під мікроскопом: наносекундні дані та двосторонній spread
Точний SQL-код для кожного числа
WITH
(
SELECT (formatDateTime(toTimeZone(toStartOfSecond(sip_timestamp), 'America/New_York'), '%H:%i:%S'), count())
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY toStartOfSecond(sip_timestamp)
ORDER BY count() DESC, toStartOfSecond(sip_timestamp) ASC
LIMIT 1
) AS busiest_sec,
ordered AS (
SELECT
toFloat64(ask_price - bid_price) AS spread,
bid_price,
ask_price,
toFloat64(sip_timestamp - lagInFrame(sip_timestamp) OVER (ORDER BY sip_timestamp, sequence_number)) AS gap_s,
greatest(toFloat64(least(leadInFrame(sip_timestamp, 1, toDateTime64('2026-06-29 20:00:00', 9)) OVER (ORDER BY sip_timestamp, sequence_number ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING), toDateTime64('2026-06-29 20:00:00', 9)) - sip_timestamp), 0) AS dwell_s,
rowNumberInAllBlocks() AS rn
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
)
SELECT
round(count() / 1e6, 2) AS spy_updates_m,
busiest_sec.1 AS busiest_second_et,
toUInt8(startsWith(busiest_sec.1, '10:15')) AS busiest_second_in_1015,
busiest_sec.2 AS busiest_second_updates,
round(minIf(gap_s, rn > 0 AND gap_s > 0) * 1e9) AS min_gap_between_updates_ns,
round(quantileExactIf(0.5)(gap_s, rn > 0) * 1e6, 1) AS median_gap_us,
countIf(rn > 0 AND gap_s = 0) AS identical_timestamp_pairs,
round(sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS time_weighted_avg_spread_cents,
round(avgIf(spread, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS per_update_avg_spread_cents,
round((avgIf(spread, bid_price > 0 AND ask_price >= bid_price) - sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price)) * 100, 2) AS per_update_premium_cents,
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price) AS crossed_updates,
countIf(bid_price <= 0 OR ask_price <= 0) AS zero_bid_or_ask_updates
FROM orderedКотирування SPY змінювалися 3.98 мільйонів разів лише під час звичайних торгових сесій. Найбільш активна секунда — 10:15:43 ET, що припала на зазначену 10:15 хвилину — містила 1461 оновлень. Найменший інтервал між послідовними оновленнями склав 1375 наносекунд, медіанний — 245.6 мікросекунд, а 75138 послідовних пар мали ідентичні наносекундні мітки — навіть наносекундна точність не дозволяє повністю впорядкувати сучасну стрічку угод.
Ці наносекунди слугують для вимірювання bid-ask spread. Якщо рахувати кожне оновлення рівноцінно, середній spread SPY становив 2.72 центів; якщо зважувати кожне котирування за часом його дії, він склав 2.34 центів. Механічний показник на кожне оновлення виглядає на 0.38 центів ширшим: оновлення накопичуються саме в моменти, коли spread є широким і волатильним, тоді як стаціонарний ордер існує у часовому вимірі. Коли ви бачите статистику spread, звертайте увагу на те, який саме годинник її вимірював. Дані є відкритими, а не прихованими: 1544 оновлень у звичайні години мали перетин цін (ask нижче bid, що є переплетенням котирувань з різних майданчиків) і 0 мали нульовий bid або ask; статистика spread виключає обидва ці випадки та враховує те, що вони виключають.
Спред має часовий графік
Розподіл котируваного спреду SPY за тридцятоквилинними інтервалами перетворює мікроструктуру на криву, яку може використовувати будь-який трейдер:
Точний SQL-код для кожного числа
SELECT
formatDateTime(toTimeZone(toStartOfInterval(sip_timestamp, INTERVAL 30 MINUTE), 'America/New_York'), '%H:%i') AS et_time,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS median_spread_cents,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 08:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_time
ORDER BY et_timeМедіана становить 8 цента в сегменті премаркету 04:00 ET, 3 цента в сегменті відкриття 09:30 та 2 цента до 14:00 — купівля тієї самої акції на відкритті премаркету коштує приблизно в чотири рази дорожче, ніж виконання ордера в першій половині дня. Спред не є постійною величиною; це розклад.
Форензика: файл, що зупинився на S
Кожен щоденний файл постачальника проходить перевірку на повноту перед публікацією даних: підрахунок тикерів, перевірка алфавітного діапазону, порівняння з сусідніми даними. Файл FINRA щодо позабіржового об'єму коротких продажів за 29 червня є прикладом того, чому це необхідно:
Точний SQL-код для кожного числа
SELECT
date,
uniqExact(ticker) AS tickers,
min(ticker) AS first_ticker,
max(ticker) AS last_ticker,
countIf(ticker = 'TSLA') AS tsla_rows,
round(100 * sum(short_volume) / sum(total_volume), 2) AS short_pct_of_reported
FROM global_markets.stocks_short_volume
WHERE date BETWEEN '2026-06-26' AND '2026-06-30'
GROUP BY date
ORDER BY dateФайл за 26 червня охоплює 15052 тикерів, від A до ZYME. Файл за 29 червня охоплює 5489, від A до SSUS — він просто переривається на іменах, що починаються на S. Кожен тикер за алфавітом після цієї точки — включно з TSLA, що має 0 рядків за 29 червня проти 1 за 26 червня — відсутній; до 30 червня файл знову містить 15362 тикерів. Перевірка на повноту — це не що інше, як порівняння таких щоденних показників; це різниця між публікацією статистичного даного та публікацією помилкового артефакту.
З урахуванням цього зауваження — і лише з ним — наведено співвідношення: об'єм позначених коротких продажів становить 45.85% від загального звітеного позабіржового об'єму за 29 червня, порівняно з 46.89% за 26 червня та 48.82% за 30 червня. Показник за 29 червня охоплює лише сегмент від A до S, тому його слід вважати частковим зчитуванням. Показник коротких продажів, що становить майже половину, є стандартним рівнем для кожної сусідньої сесії — і щоденний об'єм коротких продажів не є short interest.
Примітки до даних
Повні примітки до даних
- Затишшя в котируванні з 17:00 до 18:00. Потік котирувань SPY майже зупиняється в півгодину 17:00 ET (оновлення 233) і відновлюється до 18:00 (40608) — це патерн сесії/потоку котирувань для різних тикерів, а не відсутність даних.
- Дробові акції зустрічаються повсюдно. 4.73% операцій мають нецілі підрозділи; об'єм необхідно підсумовувати як десяткові дроби.
- Словник кодів використовує однакові id для різних типів. Id 15 є одночасно умовою продажу (Market Center Official Close) та умовою котирування (Closed); кожен запит до словника тут фільтрує за параметрами asset_class = 'stocks' ТА type = 'sale_condition'. Звичайний пошук за id призводить до неправильної класифікації кодів.
- Виключення якості котирувань враховано безпосередньо. Кількість перехресних угод та угод з нульовим спредом (bid/ask) відображена в панелі мікроскопа SPY вище; жодна статистика спреду не приховує ці падіння.
- Повне сканування стрічки — це лише пакетні панелі. Поширні ринкові блоки тут вимірювалися приблизно до 30 секунд кожен на холодному кеші (тайм-аут блоку призводить до повторної спроби; прохід з розігрітим кешем знімає обмеження); вони запускаються один раз під час підготовки матеріалу через обмежений шлях лише для читання, не є живими для читачів, а збережені результати є офіційним записом.
Методологія
- Часові мітки зберігаються в UTC і фільтруються за необробленими межами UTC (регулярні години 29 червня — з 13:30 до 20:00 UTC); функція toTimeZone використовується лише у списках SELECT.
- Тип сесії перевіряється відповідно до календаря вихідних днів та встановленого 390-барового регулярного вікна; він ніколи не припускається автоматично.
- "Об'єм, підрахований SIP (зіставлений)" — це об'єм, який власні правила умов SIP включають до консолідованого підсумку; набір виключень виводиться зі словника та обмежений контрольною сумою, а не прописується жорстко.
- Статистика spread на кожне оновлення зважує кожне оновлення NBBO однаково; часово-зважена статистика зважує кожну котирування залежно від тривалості її дії. Обидва методи розкривають свої виключення.
- Десяткові стовпці ціни/розміру сумуються нативно та приводяться до 64-бітних чисел з плаваючою комою перед будь-якими арифметичними операціями відношення або ціна-на-розмір.
- Таблиці тіків зберігають повну історію без скорочення терміну дії; ці збережені версіоновані результати є постійним записом незалежно від усього. Стан сховища станом на липня 2026 року.
Кожна панель вище є одним збереженим об'єктом — графік, таблиця та SQL разом. Відкрийте будь-яку з них, скопіюйте запит і використайте його далі на терміналі Strasmore.