-- name: GetBetSummary :one SELECT SUM(amount) as total_stakes, COUNT(*) as total_bets, SUM( CASE WHEN status = 0 THEN 1 ELSE 0 END ) as active_bets, SUM( CASE WHEN status = 1 THEN 1 ELSE 0 END ) as total_wins, SUM( CASE WHEN status = 2 THEN 1 ELSE 0 END ) as total_losses, SUM( CASE WHEN status = 1 THEN amount * total_odds ELSE 0 END ) as win_balance FROM bets wHERE ( user_id = sqlc.narg('user_id') OR sqlc.narg('user_id') IS NULL ) AND ( created_at > sqlc.narg('created_before') OR sqlc.narg('created_before') IS NULL ) AND ( created_at < sqlc.narg('created_after') OR sqlc.narg('created_after') IS NULL ); -- name: GetBetStats :many SELECT DATE(created_at) as date, COUNT(*) as total_bets, SUM(amount) as total_stakes, SUM( CASE WHEN status = 1 THEN 1 ELSE 0 END ) as total_wins, SUM( CASE WHEN status = 1 THEN amount * total_odds ELSE 0 END ) as total_payouts, AVG(total_odds) as average_odds FROM bets wHERE ( user_id = sqlc.narg('user_id') OR sqlc.narg('user_id') IS NULL ) AND ( is_shop_bet = sqlc.narg('is_shop_bet') OR sqlc.narg('is_shop_bet') IS NULL ) AND ( cashed_out = sqlc.narg('cashed_out') OR sqlc.narg('cashed_out') IS NULL ) AND ( full_name ILIKE '%' || sqlc.narg('query') || '%' OR phone_number ILIKE '%' || sqlc.narg('query') || '%' OR sqlc.narg('query') IS NULL ) AND ( created_at > sqlc.narg('created_before') OR sqlc.narg('created_before') IS NULL ) AND ( created_at < sqlc.narg('created_after') OR sqlc.narg('created_after') IS NULL ) GROUP BY DATE(created_at) ORDER BY DATE(created_at); -- name: GetTotalBetsMadeInRange :one SELECT COUNT(*) AS total_bets FROM bets WHERE created_at BETWEEN sqlc.arg('from') AND sqlc.arg('to'); -- name: GetTotalCashMadeInRange :one SELECT COALESCE(SUM(amount), 0) AS total_cash_made FROM bets WHERE created_at BETWEEN sqlc.arg('from') AND sqlc.arg('to'); -- name: GetTotalCashOutInRange :one SELECT COALESCE(SUM(amount), 0) AS total_cash_out FROM bets WHERE created_at BETWEEN sqlc.arg('from') AND sqlc.arg('to') AND cashed_out = true; -- name: GetTotalCashBacksInRange :one SELECT COALESCE(SUM(amount), 0) AS total_cash_backs FROM bets WHERE created_at BETWEEN sqlc.arg('from') AND sqlc.arg('to') AND status = 5; -- name: GetMarketPopularity :one WITH market_counts AS ( SELECT DATE(b.created_at) as date, bo.market_name, COUNT(*) as bet_count, ROW_NUMBER() OVER ( PARTITION BY DATE(b.created_at) ORDER BY COUNT(*) DESC ) as rank FROM bets b JOIN bet_outcomes bo ON b.id = bo.bet_id WHERE bo.market_name IS NOT NULL AND ( user_id = sqlc.narg('user_id') OR sqlc.narg('user_id') IS NULL ) AND ( created_at > sqlc.narg('created_before') OR sqlc.narg('created_before') IS NULL ) AND ( created_at < sqlc.narg('created_after') OR sqlc.narg('created_after') IS NULL ) GROUP BY DATE(b.created_at), bo.market_name ) SELECT date, market_name FROM market_counts WHERE rank = 1;