comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
Medium |
|
Table: transactions
+------------------+------+ | Column Name | Type | +------------------+------+ | transaction_id | int | | amount | int | | transaction_date | date | +------------------+------+ The transactions_id column uniquely identifies each row in this table. Each row of this table contains the transaction id, amount and transaction date.
Write a solution to find the sum of amounts for odd and even transactions for each day. If there are no odd or even transactions for a specific date, display as 0
.
Return the result table ordered by transaction_date
in ascending order.
The result format is in the following example.
Example:
Input:
transactions
table:
+----------------+--------+------------------+ | transaction_id | amount | transaction_date | +----------------+--------+------------------+ | 1 | 150 | 2024-07-01 | | 2 | 200 | 2024-07-01 | | 3 | 75 | 2024-07-01 | | 4 | 300 | 2024-07-02 | | 5 | 50 | 2024-07-02 | | 6 | 120 | 2024-07-03 | +----------------+--------+------------------+
Output:
+------------------+---------+----------+ | transaction_date | odd_sum | even_sum | +------------------+---------+----------+ | 2024-07-01 | 75 | 350 | | 2024-07-02 | 0 | 350 | | 2024-07-03 | 0 | 120 | +------------------+---------+----------+
Explanation:
- For transaction dates:
- 2024-07-01:
- Sum of amounts for odd transactions: 75
- Sum of amounts for even transactions: 150 + 200 = 350
- 2024-07-02:
- Sum of amounts for odd transactions: 0
- Sum of amounts for even transactions: 300 + 50 = 350
- 2024-07-03:
- Sum of amounts for odd transactions: 0
- Sum of amounts for even transactions: 120
- 2024-07-01:
Note: The output table is ordered by transaction_date
in ascending order.
We can group the data by transaction_date
, and then calculate the sum of transaction amounts for odd and even dates separately. Finally, sort by transaction_date
in ascending order.
# Write your MySQL query statement below
SELECT
transaction_date,
SUM(IF(amount % 2 = 1, amount, 0)) AS odd_sum,
SUM(IF(amount % 2 = 0, amount, 0)) AS even_sum
FROM transactions
GROUP BY 1
ORDER BY 1;
import pandas as pd
def sum_daily_odd_even(transactions: pd.DataFrame) -> pd.DataFrame:
transactions["odd_sum"] = transactions["amount"].where(
transactions["amount"] % 2 == 1, 0
)
transactions["even_sum"] = transactions["amount"].where(
transactions["amount"] % 2 == 0, 0
)
result = (
transactions.groupby("transaction_date")
.agg(odd_sum=("odd_sum", "sum"), even_sum=("even_sum", "sum"))
.reset_index()
)
result = result.sort_values("transaction_date")
return result