Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на поиск мин. цены, absolute database 
:(
    Опции темы
Gluttton
Дата 17.10.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Ч-ч-черт!

Запятая пропущена же в 6-ой строке!
Он же говорит, что я жду FROM т.к. точка была smile !

Добавлено через 9 минут и 11 секунд
Вот такой вот пример нашел на сайте разработчика:
Код

select 
v1."Venue", 
(
    select count(*) 
    from "Events" e1 
    where e1."VenueNo" = v1."VenueNo"
) as "EventsCount"
    from "venues" v1
    order by "EventsCount" desc

Т.е. коррелированные подзапросы поддерживаются!
Может быть и наш запрос переделать подобным образом...
Нужно подумать...

Добавлено через 13 минут и 16 секунд
Код

select
    Files.name,
    (
        select
            min(Tovar.price) as price
        from Tovar
            where Tovar.file_id=Files.id
    )   as "MinPrice"
from Files


Если такой запрос прокатит, то счастье будет smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
Gluttton
Дата 17.10.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



lat, не спать smile !

Вариант с коррелированным подзапросом работает?


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 17.10.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Цитата(Gluttton @  17.10.2009,  22:58 Найти цитируемый пост)
select
    Files.name,
    (
        select
            min(Tovar.price) as price
        from Tovar
            where Tovar.file_id=Files.id
    )   as "MinPrice"
from Files


Ухты!
Показало все поля из таблицы Files )))

Это сообщение отредактировал(а) lat - 17.10.2009, 23:18
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 17.10.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(lat @  17.10.2009,  23:17 Найти цитируемый пост)
Показало все поля из таблицы Files )))

И всё  smile ? А как же вторая колонка?


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 17.10.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



MinPrice есть, но оно везде равно нулю  smile 
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 17.10.2009, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Перед тем как выйти на финишную прямую хочу уточнить правильно ли я понимаю предметную область...

Есть файлы... Каждый файл имеет имя...
Каждому файлу соотвествует (содержиться или как угдно) несколько записей из таблицы товаров...

Нужно отобразить:
Имена всех файлов, а так же информацию о товаре с минимальной ценой соответствующий данному файлу...

Или же:
Имена всех файлов, а так же информацию о всех товарах соответствующих данному файлу и в придачу для них найти ещё минимальную цену...

Или что то другое?

Добавлено через 3 минуты и 47 секунд
Цитата(lat @  17.10.2009,  23:21 Найти цитируемый пост)
MinPrice есть, но оно везде равно нулю   

Предлагаю сделать следующее (что бы я понимал о чем речь) заполнить таблицы буквально двумя-тремя картежами (строками) тестовых данных и выложить сюда. Тогда легче будет понят то или не то возвращает запрос...


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 17.10.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Цитата(Gluttton @  17.10.2009,  23:26 Найти цитируемый пост)
Есть файлы... Каждый файл имеет имя...
Каждому файлу соотвествует (содержиться или как угдно) несколько записей из таблицы товаров...

Ага, верно.


Цитата(Gluttton @  17.10.2009,  23:26 Найти цитируемый пост)
Или что то другое? 


Нужно найти в таблице Tovar (а там находятся все товары из всех файлов) одинаковые товары, выбрать из них товар с минимальной стоимостью и вывести инфу о нем, включая инфу о том в каком файле (прайсе) был взят товар.

ЗЫ прога анализирует прайсы, находит одинаковые товары и выбирает тот который имеет наименьшую стоимость. 

Это сообщение отредактировал(а) lat - 17.10.2009, 23:35
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 17.10.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Код

select
    Tovar.name_new,
    min(Tovar.price) as MinPrice,
    Files.name
from Tovar, Files
    where Tovar.file_id=Files.id
    group by Tovar.name_new, Files.name

Вот так (только ещё нужно вывести остальную информацию о товаре)? 


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 17.10.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



запрос дал не правильный результат ((( 

Ну смотри. 
Например в таблице Tovar есть 3000 записи. В таблице Files - всего 2-е (так как все товары были взяты из 2-х прайсов).
Предположим в этих двух прайсах были идентичные записи о товарах, с той лишь разницей что цены у них разные. 
Так вот нужно что бы после запроса, на выходе было 1500 записей с ценой (минимальной) и инфой о файле источнике. 

Так вот тот запрос дал 2800 записей.

Добавлено @ 23:53

Таблички:
Tovar.sql
File.sql

Может так проще будет задачу решить. Как бы в живую увидеть о чем речь)

Это сообщение отредактировал(а) lat - 17.10.2009, 23:57
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 17.10.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Что бы из 3000 записей было отобрано 1500 нужно что бы каждая запись повторялась ровно два раза...
А раз выводит 2800, то это значит, что среди 3000 записей только 200 повторяются в обоих прайсах, а остальные уникальны (т.е. содержаться только в одном из двух прайсов).
А отсюда резонный вопрос, по какому признаку определять "одинаковость" товара? Я делал по name_new, правильно?

Ещё раз прошу! Предлагаю заполнить БД двумя-тремя строчками данных (показать мне эти строчки) и потом постить что вернул запрос и что от него ожидалось... Так будет легче  smile ...

Ну и  smile 
А вообщето (я уже потихоньку начинаю въезжать в суть БД) тут на лицо ошибка проектирования (по моему)!

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

Т.е. как то так

Товары:
код,
наименование,
характеристики

Товар_в_Прайсе:
код_товара,
код_прайса,
цена

Прайс:
код,
наименование,
фирма

Ну это так, на правах оффтопа smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 18.10.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Цитата(Gluttton @  17.10.2009,  23:58 Найти цитируемый пост)
Предлагаю заполнить БД двумя-тремя строчками данных (показать мне эти строчки)


приатачил все файлы в пред посту.

Цитата(Gluttton @  17.10.2009,  23:58 Найти цитируемый пост)
Что бы из 3000 записей было отобрано 1500 нужно что бы каждая запись повторялась ровно два раза...
А раз выводит 2800, то это значит, что среди 3000 записей только 200 повторяются в обоих прайсах


в том то и прикол, я делал так что бы повторялось ровно два раза.

Цитата(Gluttton @  17.10.2009,  23:58 Найти цитируемый пост)
А вообщето (я уже потихоньку начинаю въезжать в суть БД) тут на лицо ошибка проектирования (по моему)!

ща обмозгую ...

Добавлено @ 00:07
Код

select
    Tovar.name_new,
    min(Tovar.price) as MinPrice,
    Files.name
from Tovar, Files
    where Tovar.file_id=Files.id
    group by Tovar.name_new, Files.name


Вернуло 3246 из 3796.
Результат приатачил к посту.

Это сообщение отредактировал(а) lat - 18.10.2009, 00:10

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Result.zip 57,71 Kb
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 18.10.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(lat @  18.10.2009,  00:02 Найти цитируемый пост)
Вернуло 3246 из 3796.Результат приатачил к посту.

Предлагаю сократить объем тестовых данных до осязаемых размеров - до десятка штук. Есть такая возможность? И на этом десятке выполнять запросы, тогда и ошибка найдется... А на 3000 тысячах записей у меня ну прямо глаза разбегаются smile ...

Добавлено через 10 минут и 48 секунд
Так... Ошибку нашел... Думаю...

Добавлено через 12 минут и 54 секунды
Судя по результатам запроса в БД 3796-3246=? товара по одинаковой цене в обоих прайсах... 


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 18.10.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Файлы урезал до разумного размера =) 
Грузить с того же источника.
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Gluttton
Дата 18.10.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(lat @  18.10.2009,  00:28 Найти цитируемый пост)
Грузить с того же источника.

ОК! Сейчас перенесу данные к себе в БД и думаю что дела пойдут быстрее, но если честно, то такого ступора у меня уже давно не было smile ...
Что то никак не идет шайба в канадские ворота smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
lat
Дата 18.10.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Та да. Задачка повергла уже как минимум 3 - х людей в некий продолжительно-мучительный ступор =)
Видно это все влияние госпожи субботы ;)

--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.