Sql запросы

SQL-запросы для диагностики

Набор запросов для разбора инцидентов по гостям, заказам, транзакциям и скидкам. Плейсхолдеры в квадратных скобках ([point_id], [guest_id], [токен]) заменяются на реальные значения.

Поиск дублей гостей

Находит пары гостей с одинаковым телефоном на указанных поинтах.

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).

UPDATE `guests_load_raw_data`
SET `status` = 'hard_update'
WHERE `point` = [point_id] AND `status` = 'double';

Сравнение стоимости блюд в заказе и БД

Сверяет цену позиции из заказа с ценой в меню лояльности (lmdp). Позиции заказа подставляются во вложенный SELECT ... UNION ALL.

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 с таблицами блюд меню

Поиск категорий по блюдам из заказа

Определяет, к каким категориям относятся блюда заказа (для разбора применения скидок/механик).

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) с суммой продаж гостя.

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

Проверяет наличие, активность и автоматичность скидок по их внешним идентификаторам.

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.

UPDATE cl_guests
SET provider = 'remarked'
WHERE provider = 'iiko' AND point = [point_id];

Поиск транзакций по гостю

Все транзакции лояльности гостя.

SELECT * FROM loyalty_transactions WHERE guest_id IN ([guest_id]);

Поиск гостя по транзакции загрузки

Находит запись загрузки по токену транзакции.

SELECT * FROM `guests_load_raw_data` WHERE `transaction_token` = '[токен]';

Запрос на рефералку

Выводит пары «приглашённый — пригласивший» по реферальным связям поинта.

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];