Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Интересная задачка


Автор: initmax 15.6.2012, 10:01
Дано две простых таблицы

Код

shop
1) ID - auto increment - "int"
2) Name - "varchar"

goods
1) ID - auto increment - "int"
2) ID_shop - "int"
3) Profit - "int"


В таблице "shop" и ID и Name всегда уникальны. В таблице "goods" поля могут повторяться
Требуется составить запрос который покажет сумму по каждому Shop.Name.

Первое что приходит на ум:

Код

SELECT  Name, SUM(Profit) AS result_mount 
FROM goods
JOIN (SELECT * FROM shop s)
res ON res.ID = goods.ID_shop GROUP BY Name;


Всё отрабатывает корректно, но учёные мужи утверждают, что при таком запросе на некоторых входных данных иногда возникают ошибки.

1) Надо вычислить эти самые хитрые входные данные
2) Подправить запрос

У кого какие идеи? в какую сторону копать? 





Автор: Akina 15.6.2012, 10:40
Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Интересная задачка.

Ни хрена не интересная. Простая как две копейки.

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
В таблице "shop" и ID и Name всегда уникальны.

По отдельности или парой?

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Первое что приходит на ум

Бредятина. Последствия процедурного мышления, перенесённого на SQL.

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Всё отрабатывает корректно

На какой СУБД?

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Подправить запрос

Написать заново. С нуля. Предварительно почитав хоть что-нибудь про SQL.

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Надо вычислить эти самые хитрые входные данные

Магазины, по которым нет товаров в таблице goods, не будут присутствовать в выходном наборе, например.
Если в каких-то записях не проставлен Profit - тоже возможно счастьице...

Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
Подправить запрос

Ооо... это самостоятельно.

Автор: Zloxa 15.6.2012, 11:26
Цитата(initmax @  15.6.2012,  11:01 Найти цитируемый пост)
на некоторых входных данных иногда возникают ошибки.

Ошибки какого характера?
Я так полагаю, результат этого запроса не соответствует каким-то бизнесс требованиям.
Что заставляет вас полагать, что нам эти требования известны?

Автор: initmax 15.6.2012, 11:43
Цитата

Я так полагаю, результат этого запроса не соответствует каким-то бизнесс требованиям.
Что заставляет вас полагать, что нам эти требования известны?


спасибо за ответ, я просто не полностью знал условие задачи. 
Требования не были чётко сформулированы, т.е. по принципу "догадайся мол сам" 
когда начал прояснять их то оказалось что надо отобразить все магазины, даже те у которых товаров 0. Теперь всё ясно. 


Автор: Zloxa 15.6.2012, 12:27
Цитата(initmax @  15.6.2012,  12:43 Найти цитируемый пост)
 Теперь всё ясно. 

Т.е. вопрос снят, про left join вы в курсе?

Автор: initmax 15.6.2012, 13:34
Да, разумеется, всем спасибо.

З.Ы.
Не люблю загадок с не полным условием ... 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)