Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

Открыть новую тему     Написать ответ в эту тему

ZhekaVorobey182



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Да да конечно в запросе ,  база  Firebird 2.1  
 
Кстати  а как  упростить хотя бы Текущий запрос а то  Громозко  

Всего записей: 325 | Зарегистр. 27-02-2022 | Отправлено: 11:45 13-09-2025 | Исправлено: ZhekaVorobey182, 11:47 13-09-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Кстати  а как  упростить  запрос а то  Громозко  


Код:
select dl.drug_name, adp.price as priceapt, j.VsegoInAptek, j.Minprice, j.Maxprice
from aptdrugpresent as adp
join (
   select
      dcode,
      max(price) as Maxprice,
      min(price) as Minprice,
      count(price) as VsegoInAptek
    from aptdrugpresent
    where kol != 0
    group by dcode
) j on j.dcode = adp.dcode
left join drug_list as dl on dl.drug_code = adp.dcode
where adp.scode = 207
order by dl.drug_name

 
ZhekaVorobey182

Цитата:
Да да конечно в запросе ,  база  Firebird 2.1  

добавить в select
row_number() over (order by dl.drug_name)
https://www.firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref40/fblangref40-windowfuncs-rankfuncs.html

Всего записей: 16424 | Зарегистр. 20-09-2014 | Отправлено: 11:48 13-09-2025 | Исправлено: Mavrikii, 11:49 13-09-2025
ZhekaVorobey182



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Ага ,  спасибо , только row_number()   это просто  порядковый номер записи  
 

Тут  надо  
5-НТР (Гидрокситриптофан) 100 мг (капсулы 250 мг N60) Эвалар ЗАО - Россия
Цена  аптеки  1287,40
Средняя цена  1274,21
Значит  позиция  примерно должна быть  196 /2 = где то 75
 
Или  через SQl это  не сделать  ????
 
Или  модет есть математичекая  формула ???
А есть  математики на портале ???

Всего записей: 325 | Зарегистр. 27-02-2022 | Отправлено: 09:23 15-09-2025 | Исправлено: ZhekaVorobey182, 09:30 15-09-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZhekaVorobey182

Цитата:
Значит  позиция  примерно должна быть  196 /2 = где то 75

а точнее? что значит "позиция"?

Всего записей: 16424 | Зарегистр. 20-09-2014 | Отправлено: 11:06 15-09-2025
ZhekaVorobey182



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Да я  думаю через  SQL это невозможно ,  но спасибо за то что  есть  

Всего записей: 325 | Зарегистр. 27-02-2022 | Отправлено: 12:11 15-09-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZhekaVorobey182

Цитата:
Да я  думаю через  SQL это невозможно

ну так объясните, что хотите, тогда и будет видно, возможно или нет.

Всего записей: 16424 | Зарегистр. 20-09-2014 | Отправлено: 17:12 15-09-2025
ZhekaVorobey182



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Пробую
APTDRUGPRESENT  -  Прайс ,  с ценами препаратов
DCODE- Код препарата  / SCODE -Код Аптеки
 
DRUG_LIST - Справочник препаратов
Drug_code -код  / Drug_name - Имя
 
DIST_TABLE - Справочник Районов
CODE_DIST   /  NAME_DIST

 
Вот что  получилась почти

Код:
select dl.drug_name, adp.price as priceapt,j.AvgPrice, j.VsegoInAptek, j.Minprice, j.Maxprice ,'====I====',adp.dcode,adp.scode
from aptdrugpresent as adp
join (
   select
      dcode,
      avg(price) as Avgprice,
      max(price) as Maxprice,
      min(price) as Minprice,
      count(price) as VsegoInAptek
    from aptdrugpresent adp2,apts
    /* Код  района */
    where price <> 0  and adp2.scode =apts.apt_code and  apts.dist_code =2
    group by dcode
 
) j on j.dcode = adp.dcode
join drug_list as dl on dl.drug_code = adp.dcode
/* Код  пртеки */
where adp.scode = 20034
order by dl.drug_name


Берем
5 дней Крем для ног заживляющий с маслом чайного дерева (35 г) Россия Галенофарм/Санкт-Петербургская фармфабрика
DRUG_CODE=214314
 
Наша  Аптека  apt_code=20034

Код:
select a.apt_short ,adp.price,'==I==',scode,dcode
from aptdrugpresent as adp
join apts as a
on adp.scode =a.apt_code  
where dcode=52054  and a.dist_code =2
order by adp.price  

Видим  наша аптека  на Третьем  месте  

И вот  так для  каждого препарата )
 

Всего записей: 325 | Зарегистр. 27-02-2022 | Отправлено: 11:10 17-09-2025 | Исправлено: ZhekaVorobey182, 11:19 17-09-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZhekaVorobey182

Цитата:
Видим  наша аптека  на Третьем  месте  

место определяется сортирвкой цен у всех аптек?
все, что нужно, посчитать количество аптек, у которых цена ниже
поэтому просто добавляете left join, в котором делаете выборку лекарства, сортируете по цене, и считаете количество аптек выше.
вот тут row_number() и пригодится.

Всего записей: 16424 | Зарегистр. 20-09-2014 | Отправлено: 11:18 17-09-2025 | Исправлено: Mavrikii, 11:19 17-09-2025
ZhekaVorobey182



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 

Код:
select dl.drug_name, adp.price as priceapt,j.AvgPrice, j.VsegoInAptek, j.Minprice, j.Maxprice ,'====I====',adp.dcode,adp.scode,mesto
from aptdrugpresent as adp
join (
   select
      dcode,
      avg(price) as Avgprice,
      max(price) as Maxprice,
      min(price) as Minprice,
      count(price) as VsegoInAptek
    from aptdrugpresent adp2,apts
    /* Код  района */
    where price <> 0  and adp2.scode =apts.apt_code and  apts.dist_code =2
    group by dcode
 
) j on j.dcode = adp.dcode
join drug_list as dl on dl.drug_code = adp.dcode
 
left join (
   select count(*)  as MESTO
   from aptdrugpresent adp3,apts as a3
   where adp3.price <> 0 and adp3.price<adp.price and adp3.scode=a3.apt_code and a3.dist_code=2
) j3 on j3.dcode=adp.dcode
 
/* Код  пртеки */
where adp.scode = 20034
order by dl.drug_name

 
А может как то так   ???
 
 
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
ADP.PRICE.
At line 21, column 41.
-------------------------------------------
SQLCODE: -206
SQLSTATE: 42S22
GDSCODE: 335544569
 

Всего записей: 325 | Зарегистр. 27-02-2022 | Отправлено: 11:44 17-09-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZhekaVorobey182

Цитата:
Column does not belong to referenced table.

конечно не принадлежит, тот select ничего не знает об adp таблице.
связка должна быть вне (), через селект в j3 таблице
поэтому там нужно сортировать по цене и брать либо row_number(), либо подсчет после сортировки.
 
для ускорения могут понадобиться индексы.

Всего записей: 16424 | Зарегистр. 20-09-2014 | Отправлено: 17:28 17-09-2025 | Исправлено: Mavrikii, 17:31 17-09-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru