Senior
Маалыматтар схемасы менен базасы бар // колдонуучу id | аты | фамилиясы | туулган күнү 1 | Ivan | Petrov | [телефон] | Anna | Petrova | [телефон] | Anna | Petrova | [телефон] // сатып алуу sku | баа | user_id | дата 1 | 5500 | 1 | [телефон] | 5700 | 1 | [телефон] | 4000 | 1 | [телефон] | 8000 | 2 | [телефон] | 400 | 2 | [телефон] // тыюу_тизмеси user_id | башталыш_датасы 1 | [телефон] Керек болгон нерсе: 1. Тыюу салынганга чейин колдонуучулар тарабынан жасалган бардык сатып алуулар үчүн колдонуучу жана продукт IDнин уникалдуу комбинацияларын көрсөтүңүз. Биринчиден колдонуучу аты боюнча, андан кийин SKU боюнча сорттоо 2. 5000ден ашык суммада сатып алуу жасаган колдонуучуларды табыңыз. Анын аты-жөнүн төмөндөгү форматта көрсөтүңүз: user_id | аты | фамилиясы | сатып алуулар суммасы
sobes.tech AI
AIден жооп
Для решения задачи с базой данных можно использовать SQL-запросы, а в Go — выполнить их через стандартные библиотеки.
- Уникальные комбинации пользователя и id товара для покупок, совершённых до бана, отсортированные по имени и SKU:
SELECT DISTINCT u.firstname, u.lastname, p.sku
FROM purchase p
JOIN user u ON p.user_id = u.id
LEFT JOIN ban_list b ON p.user_id = b.user_id
WHERE b.date_from IS NULL OR p.date < b.date_from
ORDER BY u.firstname, p.sku;
- Пользователи с суммой покупок больше 5000:
SELECT u.id, u.firstname, u.lastname, SUM(p.price) AS total_spent
FROM purchase p
JOIN user u ON p.user_id = u.id
GROUP BY u.id, u.firstname, u.lastname
HAVING SUM(p.price) > 5000;
В Go можно выполнить эти запросы через database/sql и обработать результаты. Пример для второго запроса:
rows, err := db.Query(`
SELECT u.id, u.firstname, u.lastname, SUM(p.price) AS total_spent
FROM purchase p
JOIN user u ON p.user_id = u.id
GROUP BY u.id, u.firstname, u.lastname
HAVING SUM(p.price) > 5000
`)
if err != nil {
log.Fatal(err)
}
type UserSpending struct {
ID int
FirstName string
LastName string
Total float64
}
var results []UserSpending
for rows.Next() {
var u UserSpending
if err := rows.Scan(&u.ID, &u.FirstName, &u.LastName, &u.Total); err != nil {
log.Fatal(err)
}
results = append(results, u)
}
// results теперь содержит пользователей с суммой покупок > 5000
Таким образом, основная логика — корректно сформировать SQL-запросы с условиями по дате бана и агрегированию сумм.