Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задачка - вынос мозга  [new]
LolBee
Member

Откуда: Киев
Сообщений: 45
Добрый день, уважаемые форумчане!

Вот уже который день бьюсь с задачей, которая уже буквально вынесла мне мозг..
Есть чувство что все очень просто, но прийти к решению никак не могу( Надеюсь ваш свежий взгляд сможет помочь!

Я накидал пример структуры базы, честно говоря я даже не знаю как это обьяснить =( ..
Суть в чем, есть вот такая база:

Таблица: sales, в которой кол-во продаж value и ссылки на 2 справочника organizations и products (который в свою очередь имеет связь с табл. brands)

DECLARE @products AS TABLE (id INT NOT NULL, product_name VARCHAR(150) NULL, brand_id INT NULL)
INSERT INTO @products VALUES
(1, 'product_1', 1),(2, 'product_2', 1)

DECLARE @brands AS TABLE (id INT NOT NULL, brand_name VARCHAR(150) NULL)
INSERT INTO @brands VALUES
(1, 'brand_1')

DECLARE @organizations AS TABLE (id INT NOT NULL, organization_name VARCHAR(150) NULL)
INSERT INTO @organizations VALUES
(1, 'organization_1'),(2, 'organization_2'),(3, 'organization_3'),(4, 'organization_4'),(5, 'organization_5'),(6, 'organization_6'),(7, 'organization_7')

DECLARE @sales AS TABLE (product_id INT NULL, organization_id INT NULL, value FLOAT)
INSERT INTO @sales VALUES
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1), (1,2,1),(1,2,1),(1,2,1),(1,2,1), --only first prod
(2,3,1),(2,3,1),(2,3,1),(2,3,1),(2,3,1),(2,3,1),(2,2,1), (2,4,1),(2,4,1),(2,4,1), (2,6,1),(2,6,1),(2,6,1),(2,6,1), --only second prod
(1,5,1),(1,5,1),(2,5,1),(2,5,1), (1,7,1),(1,7,1)--only both prod

SELECT  DISTINCT o.organization_name, p.product_name
FROM	   @sales s
    JOIN @organizations o ON s.organization_id = o.id
    JOIN @products p ON s.product_id = p.id
    JOIN @brands b ON p.brand_id = b.id
ORDER BY o.organization_name, p.product_name

Надо из этой кучи получить такую картину:

Количество организаций у которых есть хотья-бы одна продажа по:
- каждому из продуктов одного бренда отдельно (то есть если у орг есть продажа только по продукту 1 или только по продукту 2 она попадает сюда)
- по всем продуктам одного бренда (то есть есть продажа и по прод. 1 и по прод. 2)
- сумма этой галимотьи

Наглядно вот что у нас есть:

organization_name product_name
organization_1 product_1
organization_2 product_1
organization_2 product_2
organization_3 product_2
organization_4 product_2
organization_5 product_1
organization_5 product_2
organization_6 product_2
organization_7 product_1

Здесь, видно что у нас 2 организации продали ТОЛЬКО product_1, 3 орг продали ТОЛЬКО product_2,
и 2 орги продали И product_1 И product_2

product_name org
product_1 organization_1
product_1 organization_7
product_2 organization_3
product_2 organization_4
product_2 organization_6
product_All organization_2
product_All organization_5

В конечном итоге надо чтоб sql запрос выдавал что-то типа такой таблички:

product_name org_COUNT
product_1 2
product_2 3
product_All 2
product_total 7 (это просто сумма верхних цифер)

Важно заметить что продуктов у бренда может быть сколько угодно!

Если что-то не понятно - спрашивайте, я не мастер объяснять..(

Надеюсь на вашу помощь!
9 июн 17, 11:40    [20552465]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2169
LolBee,
А если у бренда 3 продукта (А, B, C), и:
- 2 организации продали только продукт А
- 3 продали продукт B
- 1 продала продукт А и В
- 4 продали продукт В и С
- 2 продали А и С
- 6 продали А и В и С

Что должно быть в результате?
9 июн 17, 11:50    [20552542]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
aleksrov
Member

Откуда:
Сообщений: 948
LolBee,

Кол-во продаж Float... За седня мы продали 2000,4552132443 булок хлеба!
По теме, соеденяете таблицы и группируете:
- каждому из продуктов одного бренда отдельно - ту как я понимаю в разрезе организации надо. Группируете по организации и продукту, считаете.
- по всем продуктам одного бренда - Группируете по организации и по бренду.
- суммируйте эту галиматью
9 июн 17, 11:59    [20552606]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
aleks2
Guest
aleksrov
LolBee,

Кол-во продаж Float... За седня мы продали 2000,4552132443 булок хлеба!
По теме, соеденяете таблицы и группируете:
- каждому из продуктов одного бренда отдельно - ту как я понимаю в разрезе организации надо. Группируете по организации и продукту, считаете.
- по всем продуктам одного бренда - Группируете по организации и по бренду.
- суммируйте эту галиматью


Задача похожа на тестовую при приеме на работу.

Ничего сложного тут нет. Мозг не нужен.
Exists спасет.
9 июн 17, 12:10    [20552659]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Exists спасет.

А еще можно не стеснятся и складывать промежуточные вычисления в таблички или ЦТЕшки. Чтоб не запутаться в попытках решить всё одним мегаселектом.
9 июн 17, 13:43    [20553150]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
Руки из плеч
Guest
Cammomile

промежуточные вычисления в таблички или ЦТЕшки. Чтоб не запутаться в попытках решить всё одним мегаселектом

Еще один ЦТЕшник. Как они уже достали, ну никак понять не могут, что эти результаты не материализуются. Хоть бы раз на план посмотрел.
9 июн 17, 14:09    [20553226]     Ответить | Цитировать Сообщить модератору
 Re: Задачка - вынос мозга  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
План для учебной задачи? Серьезно?
9 июн 17, 14:10    [20553229]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить