wiki:WikiStart/Analytics

Version 6 (modified by 203206, 8 days ago) ( diff )

db

Аналитика и статистика

Детален преглед на трансакции помеѓу корисниците по датум

SELECT 
    tm.s_account_id AS sender_id,
    a_s.username AS sender_username,
    tm.r_account_id AS receiver_id,
    a_r.username AS receiver_username,
    tm.t_id,
    t.timestamp,
    t.amount
    
FROM 
    transferred_money tm
JOIN 
    account a_s ON tm.s_account_id = a_s.id
JOIN 
    account a_r ON tm.r_account_id = a_r.id
JOIN
    "transaction" t ON tm.t_id = t.id; 


Трансакции до одреден датум и време

SELECT 
    tm.s_account_id AS sender_id,
	a_s.username AS sender_username,
	tm.r_account_id AS receiver_id,
	a_r.username AS receiver_username,
    tm.t_id,
	t.timestamp,
	t.amount
    
FROM 
    transferred_money tm
JOIN 
    account a_s ON tm.s_account_id = a_s.id
JOIN 
    account a_r ON tm.r_account_id = a_r.id
JOIN
    "transaction" t ON tm.t_id = t.id
WHERE
      timestamp<'2025-03-23 20:30:00.000000';


Трансакции по валута, подредени по време

SELECT 
    tm.s_account_id AS sender_id,
	a_s.username AS sender_username,
	tm.r_account_id AS receiver_id,
	a_r.username AS receiver_username,
    tm.t_id,
	t.timestamp,
	t.amount,
	tm.currency
    
FROM 
    transferred_money tm
JOIN 
    account a_s ON tm.s_account_id = a_s.id
JOIN 
    account a_r ON tm.r_account_id = a_r.id
JOIN
    "transaction" t ON tm.t_id = t.id
WHERE currency='EUR'
ORDER BY timestamp;

Максимум, минимум и просечен износ на сума по трансакција во одредена валута

SELECT 
	max(t.amount) as maximum,
	avg(t.amount) as "average",
	min(t.amount) as minimum
    
FROM 
    transferred_money tm
JOIN 
    account a_s ON tm.s_account_id = a_s.id
JOIN 
    account a_r ON tm.r_account_id = a_r.id
JOIN
    "transaction" t ON tm.t_id = t.id
WHERE currency='USD';

Прикажи ги корисниците со најголем број на трансфери на пари(број на с-ка, корисничко име, e-mail, број на трансфери и ранг во растечки редослед)

WITH transfer_frequency AS (
    SELECT t.s_id AS account_id, COUNT(*) AS transfer_count
    FROM transfer t
    GROUP BY t.s_id

    UNION ALL

    SELECT t.r_id AS account_id, COUNT(*) AS transfer_count
    FROM transfer t
    GROUP BY t.r_id
)

SELECT *
FROM (
    SELECT a.id AS account_id,
           a.username,
           a.email,
           tf.transfer_count,
           RANK() OVER (ORDER BY tf.transfer_count DESC) AS transfer_rank
    FROM account a
    JOIN transfer_frequency tf ON a.id = tf.account_id
) ranked_accounts
WHERE transfer_rank <= 3
ORDER BY transfer_rank;


Note: See TracWiki for help on using the wiki.