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

Откуда:
Сообщений: 255
Доброго дня уважаемые ГУРУ!
Покурил тему но не нашел нужного решения.
Есть сложный запрос пяти таблиц соединенных JOIN со временем выполнения порядка 7сек.
На основании полученного результата необходимо посчитать сумму строк по условию. Кол-во условий - свыше десяти.
как правильнее это сделать?
8 авг 16, 13:10    [19515397]     Ответить | Цитировать Сообщить модератору
 Re: запрос по результатам сложного запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
jonybest
Доброго дня уважаемые ГУРУ!
Покурил тему но не нашел нужного решения.
Есть сложный запрос пяти таблиц соединенных JOIN со временем выполнения порядка 7сек.
На основании полученного результата необходимо посчитать сумму строк по условию. Кол-во условий - свыше десяти.
как правильнее это сделать?
Какие-то данные по каким-то таблицам можно посчитать какими-то запросами.
8 авг 16, 13:13    [19515413]     Ответить | Цитировать Сообщить модератору
 Re: запрос по результатам сложного запроса  [new]
jonybest
Member

Откуда:
Сообщений: 255
Намек понял :)
В первом запросе выбираем значения запроса за период
SELECT p.*, po1.name 'P1', p2o1.value     
 
FROM products p       
 
INNER JOIN product2options p2o1 ON p.id = p2o1.product_id
INNER JOIN product_options po1  ON po1.id = p2o1.option_id

WHERE p.created_at > '2009-01-17 21:00' and p.created_at < '2010-01-17 21:00' 
  AND 
  p2o1.option_id = 11 AND p2o1.value = 310 


во втором надо посчитать кол-во записей по запросу выше с условиями
WHERE p.g1 <> p2o1.g2

и другие...
8 авг 16, 13:55    [19515674]     Ответить | Цитировать Сообщить модератору
 Re: запрос по результатам сложного запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
SELECT
  Con1_Cnt   = sum ( case when p.g1 <> p2o1.g2 then 1 else 0 end )
  , Con2_Cnt = sum ( case when <второе условие> then 1 else 0 end )
  , ...
FROM products p       
 
INNER JOIN product2options p2o1 ON p.id = p2o1.product_id
INNER JOIN product_options po1  ON po1.id = p2o1.option_id

WHERE p.created_at > '2009-01-17 21:00' and p.created_at < '2010-01-17 21:00' 
  AND 
  p2o1.option_id = 11 AND p2o1.value = 310 
8 авг 16, 14:04    [19515732]     Ответить | Цитировать Сообщить модератору
 Re: запрос по результатам сложного запроса  [new]
jonybest
Member

Откуда:
Сообщений: 255
Спасибо! Похоже то что надо. Буду пробовать.
8 авг 16, 14:14    [19515790]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить