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-запросы с условиями по дате бана и агрегированию сумм.