📚 RM.Loyalty.docs
➕ Новая статья
Редактирование: sql-запросы
Путь:
10_Логи_и_диагностика/sql-запросы.md
Содержимое (Markdown)
# SQL-запросы для диагностики Набор запросов для разбора инцидентов по гостям, заказам, транзакциям и скидкам. Плейсхолдеры в квадратных скобках (`[point_id]`, `[guest_id]`, `[токен]`) заменяются на реальные значения. ## Поиск дублей гостей Находит пары гостей с одинаковым телефоном на указанных поинтах. ```sql SELECT g1.id AS guest_id_1, g1.name AS guest_name_1, g1.phone, g1.point AS point_1, g2.id AS guest_id_2, g2.name AS guest_name_2, g2.point AS point_2 FROM cl_guests g1 INNER JOIN cl_guests g2 ON g1.phone = g2.phone AND g1.id < g2.id WHERE g1.point IN (270600, 880088, 270700) AND g2.point IN (270600, 880088, 270700) AND g1.phone IS NOT NULL AND g1.phone != '' AND g2.phone IS NOT NULL AND g2.phone != '' ORDER BY g1.phone, g1.id, g2.id; ``` ## Хард-апдейт гостей (дубли при загрузке) Помечает записи загрузчика со статусом `double` для повторной обработки (`hard_update`). ```sql UPDATE `guests_load_raw_data` SET `status` = 'hard_update' WHERE `point` = [point_id] AND `status` = 'double'; ``` ## Сравнение стоимости блюд в заказе и БД Сверяет цену позиции из заказа с ценой в меню лояльности (`lmdp`). Позиции заказа подставляются во вложенный `SELECT ... UNION ALL`. ```sql SELECT op.ext_id, op.name, op.order_price, lmdp.cost AS db_price, lmdp.type AS price_type, CASE WHEN op.order_price = lmdp.cost THEN 'Совпадает' ELSE 'НЕ СОВПАДАЕТ' END AS price_match FROM ( SELECT '78086375-c6f1-40a4-8267-e63c0e1cdfbe' AS ext_id, 'Трепун мосири кокт' AS name, 900.0 AS order_price, 1.0 AS count, 900.0 AS total_cost UNION ALL SELECT 'ec3bc57b-1ecb-4224-af89-ab2b3cbddc11', 'Россини SAGALIEN', 900.0, 1.0, 900.0 -- добавить остальные позиции ) op -- + JOIN с таблицами блюд меню ``` ## Поиск категорий по блюдам из заказа Определяет, к каким категориям относятся блюда заказа (для разбора применения скидок/механик). ```sql WITH order_items AS ( SELECT '5ca7490c-4551-4513-973c-dd6b4ac14e6f' AS product_guid, 'Сет Море Лес' AS dish_name UNION ALL SELECT 'b2ee0d2c-d41a-4d06-aad3-f2759d835ae6', 'Дары леса' UNION ALL SELECT '172540a9-4c60-4f07-bc52-fe0178bfbf49', 'Сливочный лимонад' -- добавить остальные позиции ) -- + JOIN с таблицами категорий ``` ## Сумма транзакций и сумма продаж по гостю Сверяет суммарные транзакции лояльности (`success`) с суммой продаж гостя. ```sql SELECT lt.guest_id, cg.phone, SUM(lt.sum) AS total_loyalty_sum, (SELECT SUM(order_sum) FROM cl_purchases WHERE guest_id = lt.guest_id AND order_type = 'sales') AS total_purchases_sum FROM loyalty_transactions lt LEFT JOIN cl_guests cg ON lt.guest_id = cg.id WHERE lt.status = 'success' AND lt.point = [point_id] AND lt.guest_id IN ([guest_id]) GROUP BY lt.guest_id, cg.phone; ``` ## Поиск скидок по ext_id Проверяет наличие, активность и автоматичность скидок по их внешним идентификаторам. ```sql SELECT name, ext_id, is_automatic, is_active FROM loyalty_discounts WHERE ext_id IN ( '3877f42f-5a30-4a00-b0d9-77c581345990', '26385390-c9a5-4c12-877a-0fcec0851be6', 'a9d8888a-eae9-413c-a407-4de91905b99d', 'b5720a43-54d0-415e-a7ea-70096140cf53' ); ``` ## Смена провайдера гостей на всём поинте Переводит гостей поинта с провайдера `iiko` на `remarked`. ```sql UPDATE cl_guests SET provider = 'remarked' WHERE provider = 'iiko' AND point = [point_id]; ``` ## Поиск транзакций по гостю Все транзакции лояльности гостя. ```sql SELECT * FROM loyalty_transactions WHERE guest_id IN ([guest_id]); ``` ## Поиск гостя по транзакции загрузки Находит запись загрузки по токену транзакции. ```sql SELECT * FROM `guests_load_raw_data` WHERE `transaction_token` = '[токен]'; ``` ## Запрос на рефералку Выводит пары «приглашённый — пригласивший» по реферальным связям поинта. ```sql SELECT g.id, g.name, g.surname, g.email, g.phone, rg.id, rg.name, rg.surname, rg.email, rg.phone FROM cl_guests AS g RIGHT JOIN cl_guests_referrals AS r ON g.id = r.referral_id LEFT JOIN cl_guests AS rg ON rg.id = r.referrer_id WHERE g.point = [point_id]; ```
💾 Сохранить
Отмена