Skip to content

Instantly share code, notes, and snippets.

@Khuzha
Created September 7, 2020 09:46
Show Gist options
  • Save Khuzha/9dc3defc96fe63912685a47a1f55e069 to your computer and use it in GitHub Desktop.
Save Khuzha/9dc3defc96fe63912685a47a1f55e069 to your computer and use it in GitHub Desktop.
Правильно подсчитывающий запрос:
```SELECT p2.login, tr.timestamp::date, p2.partner_id, tr.currency, p1.ref_camp, tr.subtype,
SUM(tr.amount) FILTER(WHERE tr.type = 'deposit') AS deposit,
SUM(tr.amount) FILTER(WHERE tr.type = 'payout') AS payout,
SUM(tr.amount) FILTER(WHERE tr.type = 'deposit') -
SUM(tr.amount) FILTER(WHERE tr.type = 'payout') as income,
COUNT(DISTINCT tr.login) FILTER(WHERE tr.type = 'deposit') as dep_players_count,
COUNT(*) FILTER (WHERE tr.type = 'deposit' AND tr.subtype = 'first') as fd_count
FROM transactions_paysys tr
LEFT JOIN player p1 on p1.login = tr.login
LEFT JOIN player p2 on p2.partner_id = p1.ref_id::integer
WHERE p1.ref_id IS NOT NULL
AND tr.status = 'success'
AND timestamp::date = CURRENT_DATE - INTERVAL '3' DAY
GROUP BY tr.timestamp::date, p2.partner_id, tr.currency, p2.login, p1.ref_camp, tr.subtype
ORDER BY timestamp;```
Неправильный запрос:
```SELECT p2.login, tr.timestamp::date, p2.partner_id, tr.currency, p1.ref_camp, tr.subtype,
SUM(tr.amount) FILTER(WHERE tr.type = 'deposit') AS deposit,
SUM(tr.amount) FILTER(WHERE tr.type = 'payout') AS payout,
SUM(tr.amount) FILTER(WHERE tr.type = 'deposit') -
SUM(tr.amount) FILTER(WHERE tr.type = 'payout') as income,
COUNT(DISTINCT tr.login) FILTER(WHERE tr.type = 'deposit') as dep_players_count,
COUNT(*) FILTER (WHERE tr.type = 'deposit' AND tr.subtype = 'first') as fd_count
FROM transactions_paysys tr
LEFT JOIN player p1 on p1.login = tr.login
LEFT JOIN player p2 on p2.partner_id = p1.ref_id::integer
LEFT JOIN anon_user_transitions visit on visit.ref_id::integer = p2.partner_id AND visit.timestamp::date = tr.timestamp::date
WHERE p1.ref_id IS NOT NULL
AND tr.status = 'success'
AND tr.timestamp::date = CURRENT_DATE - INTERVAL '3' DAY
GROUP BY tr.timestamp::date, p2.partner_id, tr.currency, p2.login, p1.ref_camp, tr.subtype
ORDER BY tr.timestamp::date;```
Пример: если первый запрос в столбце deposit выводит 30000, второй выведет 750000. И это при том, что не менялась ни группировка, ни сумма, ни что-либо еще, связанное с deposit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment