<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: mysql</title>
<link>http://test.leftjoin.ru/tags/mysql/</link>
<description></description>
<generator>E2 (v3365; Aegea)</generator>

<item>
<title>Три способа рассчитать накопленную сумму в SQL</title>
<guid isPermaLink="false">125</guid>
<link>http://test.leftjoin.ru/all/sql-running-total/</link>
<comments>http://test.leftjoin.ru/all/sql-running-total/</comments>
<description>
&lt;p&gt;Расчет накопленной (или кумулятивной, что то же самое) суммы SQL — это очень распространенный запрос, который часто используют в анализе финансов, динамики прибыли и прочих показателей компании. В сегодняшней статье вы узнаете, что такое накопленная сумма и как можно написать SQL-запрос для ее вычисления.&lt;/p&gt;
&lt;p&gt;Если вы вдруг являетесь начинающим пользователем SQL, то давайте, как в школьной задаче, поймем, что нам дано и что нам необходимо найти. Накопленная сумма — это совокупная сумма предыдущих чисел в столбце. Давайте посмотрим на пример ниже, чтобы точно знать, какой результат мы ожидаем увидеть в итоге. Итак, существует таблица leftjoin.daily_sales_sample, в которой есть всего два столбца date и revenue. По столбцу revenue нам нужно рассчитать накопленную сумму и записать результат в отдельный столбец.&lt;/p&gt;
&lt;h3&gt;Что у нас есть?&lt;/h3&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Revenue&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3&gt;Что мы хотим найти?&lt;/h3&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Date&lt;/td&gt;
&lt;td style="text-align: center"&gt;Revenue&lt;/td&gt;
&lt;td style="text-align: right"&gt;Cumulative Revenue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;td&gt;1200 ↓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;td&gt;2800↓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;12.11.2021&lt;/td&gt;
&lt;td style="text-align: left"&gt;800&lt;/td&gt;
&lt;td&gt;3600 ↓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;13.11.2021&lt;/td&gt;
&lt;td style="text-align: left"&gt;3000&lt;/td&gt;
&lt;td&gt;6600&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;На графике две этих переменных выглядят следующим образом:&lt;br /&gt;
&lt;img src="http://test.leftjoin.ru/pictures/sql_graph.png"  border="0" width="100%" height="100%"&gt;&lt;/p&gt;
&lt;p&gt;Итак, без лишних слов, давайте приступать к решению задачи.&lt;/p&gt;
&lt;h2&gt;Способ 1 — Идеальный —  Используем оконные функции&lt;/h2&gt;
&lt;p&gt;Итак, если в базе данных можно пользоваться оконными функциями, то жизнь хороша и прекрасна. С их помощью можно написать простой запрос, который будет суммировать значения из столбца revenue по мере увеличения даты и сразу вернет нам таблицу с кумулятивной суммой в столбце, который мы назвали total.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT
	date,
	revenue,
	SUM(revenue) OVER (ORDER BY date asc) as total
FROM leftjoin.daily_sales_sample 
ORDER BY date;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Способ 2 — Хитрый — Решение без оконных функций&lt;/h2&gt;
&lt;p&gt;Вполне возможно, что вам понадобится решить такую задачу без использования оконных функций. К примеру, если вы используете MySQL (до 8 версии) или любую другую БД, в которой оконных функций нет. Тогда решение задачи чуть усложняется. Однако, вы ведь знаете, что нет ничего невозможного?&lt;br /&gt;
Чтобы провернуть все то же самое без оконных функций, нужно использовать INNER JOIN для присоединения таблицы к себе самой. Так, к каждой строке таблицы мы присоединяем строки, которые соответствуют всем предыдущим датам до текущей даты включительно. В нашем примере, для 10 ноября — 10 ноября, для 11 ноября — 10 и 11 ноября и так далее. Промежуточный запрос будет выглядеть вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT * 
FROM leftjoin.daily_sales_sample ds1 
INNER JOIN leftjoin.daily_sales_sample ds2 on ds1.date&amp;gt;=ds2.date
ORDER BY ds1.date, ds2.date;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;А его результат:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Date 1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Revenue 1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Date 2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Revenue 2&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;10.11.2021&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;11.11.2021&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;12.11.2021&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;13.11.2021&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;А затем, нужно просуммировать прибыли, группируя их по каждой дате. Если собрать все в единый запрос, то он будет выглядеть вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT
	ds1.date,
	ds1.revenue,
	SUM(ds2.revenue) as total
FROM leftjoin.daily_sales_sample ds1 
INNER JOIN leftjoin.daily_sales_sample ds2 on ds1.date&amp;gt;=ds2.date
GROUP BY ds1.date, ds1.revenue
ORDER BY ds1.date;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Способ 3 — Специфический — Решение с помощью массивов в ClickHouse&lt;/h2&gt;
&lt;p&gt;Если вы используете Clickhouse, то в этой системе есть специальная функция, которая может помочь рассчитать кумулятивную сумму. Для начала, нам нужно преобразовать все столбцы таблицы в массивы и рассчитать показатель «Moving Sum» для столбца revenue.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT groupArray(date) dates, groupArray(revenue) as revs, 
groupArrayMovingSum(revenue) AS total
FROM (SELECT date, revenue FROM leftjoin.daily_sales_sample
	  ORDER BY date)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;i&gt;Спасибо &lt;a href="https://t.me/unamedrus"&gt;Дмитрию Титову&lt;/a&gt; из Altinity за комментарий про сортировку в подзапросе&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Так, мы получим три массива значений:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;b&gt;dates&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;revs&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;b&gt;total&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[’10.11.2021’,’11.11.2021’,’12.11.2021’,’13.11.2021’]&lt;/td&gt;
&lt;td style="text-align: center"&gt;[1200, 1600, 800, 300]&lt;/td&gt;
&lt;td style="text-align: right"&gt;[1200, 2800, 3600, 3900]&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Но три массива, которые записаны в ячейки — это не то, что мы хотим получить, хотя значения этих массивов уже абсолютно соответствуют искомому результату. Теперь массивы нужно привести обратно к табличному виду с помощью функции ARRAY JOIN.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT dates, revs, total FROM
(SELECT groupArray(date) dates, groupArray(revenue) as revs, 
groupArrayMovingSum(revenue) AS total
FROM (SELECT date, revenue FROM leftjoin.daily_sales_sample
	  ORDER BY date)) as t
ARRAY JOIN dates, revs, total;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Бонус — Оконные функции в Clickhouse&lt;/h2&gt;
&lt;p&gt;Если вам не хочется иметь дело с массивами, что иногда и правда бывает затратно по времени, то есть еще один вариант решения задачи.  Можно использовать оконные функции, например функцию &lt;a href="https://clickhouse.com/docs/en/sql-reference/functions/other-functions/"&gt;runningAccumulate(&lt;/a&gt;), которая суммирует  значения всех ячеек с первой до текущей.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;SELECT date, runningAccumulate(revenue)
  FROM 
  (
    SELECT date, sumState(revenue) AS revenue
    FROM leftjoin.daily_sales_sample
    GROUP BY date 
    ORDER BY date ASC
  )
ORDER BY date&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если вы столкнетесь с необходимостью рассчитать кумулятивную сумму в SQL, то теперь вы сможете решить эту задачу, в какой бы системе управления баз данных ни была организована работа :)&lt;/p&gt;
</description>
<pubDate>Fri, 10 Dec 2021 19:10:34 +0300</pubDate>
</item>

<item>
<title>UNPIVOT данных с использованием CROSS JOIN</title>
<guid isPermaLink="false">89</guid>
<link>http://test.leftjoin.ru/all/unpivot-with-cross-join/</link>
<comments>http://test.leftjoin.ru/all/unpivot-with-cross-join/</comments>
<description>
&lt;p&gt;Зачастую мы получаем данные в предагрегированном виде, когда каждая отдельная колонка является посчитанной метрикой. По аналогии мы получаем подобный результат, когда строим сводную таблицу в Excel и используем некоторое количество фактов для агрегации. Но что делать, если нам нужно произвести обратную операцию — Unpivot?&lt;/p&gt;
&lt;p&gt;Как поступить, если в датасете понадобилось трансформировать данные в реляционный вид? В Tableau есть фича &lt;a href="https://help.tableau.com/current/pro/desktop/en-us/pivot.htm"&gt;Unpivot&lt;/a&gt;, которая сделает всё сама: если датасет построен из файла, достаточно выделить нужные колонки и нажать на кнопку «Pivot». А в некоторых диалектах SQL, например, в Transact, уже есть &lt;a href="https://docs.microsoft.com/ru-ru/sql/t-sql/queries/from-using-pivot-and-unpivot"&gt;встроенные функции&lt;/a&gt;, которые тоже делают это сами.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/qs_pivot_example.png" width="650" height="263" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Но в случае, если датасет построен на Custom SQL Query из базы данных, у которой в арсенале отсутствуют встроенные функции для трансформации в сводную и обратно, необходим какой-то другой подход, и Tableau порекомендует для такой таблицы:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;ID&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;a&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;b&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;c&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;a1&lt;/td&gt;
&lt;td&gt;b1&lt;/td&gt;
&lt;td&gt;c1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;a2&lt;/td&gt;
&lt;td&gt;b2&lt;/td&gt;
&lt;td&gt;c2&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Воспользоваться таким стандартным универсальным, но не очень эффективным решением:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;select id, ‘a’ AS col, a AS value
from yourtable
union all
select id, ‘b’ AS col, b AS value
from yourtable
union all
select id, ‘c’ AS col, c AS value
from yourtable&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И в результате получить таблицу вида:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;col&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;a1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;a2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;b1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;b2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;c1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;c2&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Порой, когда мы работаем с физической таблицей и нам надо быстро получить результаты для двух-трех колонок, действительно, подобное решение можно быстро применить, не задумываясь. Однако в случае, когда вместо таблицы содержится, например, сложный подзапрос с несколькими джойнами и нужно сделать Pivot для 5+ колонок, подзапрос вызовется целых 5+ раз, согласитесь, не очень действенно считать одно и тоже неоднократно. Вместо этого можно воспользоваться рецептом с CROSS JOIN, найденным на просторах Stack Overflow:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;select t.id,
c.col,
    case c.col
        when 'a' then a
        when 'b' then b
        when 'c' then c
    end as data
from yourtable t
cross join
(
    select 'a' as col
    union all select 'b'
    union all select 'c'
) c&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Разберём запрос подробнее. CROSS JOIN — перекрёстное соединение, декартово произведение, или, проще говоря, произведение всех строк со всеми. За ненадобностью в синтаксисе CROSS JOIN отсутствует ON — мы объединяем не по какому-то конкретному полю две таблицы, а сразу по всем существующим строкам.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/Background_2.png" width="730" height="388" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сначала мы формируем таблицу со всеми колонками, предназначенными для преобразования в строки. В нашем случае это колонки a, b и c: поэтому мы сделали таблицу c, в которой будет колонка col со значениями a, b и c:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;(
    select 'a' as col
    union all select 'b'
    union all select 'c'
) c&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Выглядит она так:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;col&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Затем таблицы yourtable и c объединятся перекрестным соединением, а после мы возьмём поля id, col и в зависимости от того, как называется ячейка в col, подставим соответствующие данные в поле data.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;select t.id,
c.col,
    case c.col
        when 'a' then a
        when 'b' then b
        when 'c' then c
    end as value
from yourtable t
cross join
(
    select 'a' as col
    union all select 'b'
    union all select 'c'
) c&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В итоге получим ту же самую искомую таблицу, с которой уже можно удобно работать любым аналитическим инструментом:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;col&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;a1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;a2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;b1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;b2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;c1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;c2&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
</description>
<pubDate>Fri, 08 Jan 2021 16:30:14 +0300</pubDate>
</item>


</channel>
</rss>