Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом. Поля и совокупные х-ки в одном запросе ... [D7, XP]


s_t_d ©   (2009-12-16 17:11:00) 

Уважаемые мастера, пожалуйста подскажите направление поиска.
Есть 2 таблицы:
patients(patid, lastname) - табл. пациентов;
labres(id, patid, date1, val1) - табл. анализов.
Как сформировать запрос к двум таблицам, который формирует фамилии пац. и соответствующие им анализы ясно, например так:
select patients.patid, patients.lastname, labres.val1
from patients
inner join labres on (patients.patid = labres.patid)
where (
     labres.date1 > '01.01.2008'
     and labres.val1 > 0
      ).
А вот как сформировать, запрос, результатом которого будут также
patients.patid, patients.lastname и количество записейво второй таблице, удовлетворяющее тем же критериям не ясно...
Прочитал про GROUP BY, но как воспользоваться в случае двух таблиц? И вообще туда-ли двигаюсь?
СУБД - FB-1.5.
Заранее благодарю.


s_t_d   (2009-12-17 12:34:00) [1]

>[8]Seegey13. Большое спасибо за конструктивную помощь.


Sergey13   (2009-12-17 10:40:00) [2]

> [3] s_t_d   (17.12.09 00:07)
> 2)Предложенные вами варианты не проходят. Я понял так, что
> некорректное использование GROUP BY

Предпололожение не лишено основания. При группировке в Group by должны быть перечислены ВСЕ поля, перечисленные в select, кроме агрегатных.

> [7] s_t_d   (17.12.09 00:35)
> Если можете, пожалуйста подскажите, где прочесть...

В любом учебние по SQL. Можно поискать по фамилии Грубер (или Грабер).


s_t_d   (2009-12-17 00:35:00) [3]

>Сергей М. ©   (17.12.09 00:30) [6]
Если можете, пожалуйста подскажите, где прочесть...


Сергей М.   (2009-12-17 00:30:00) [4]


> что понятно-то?


Скажу прямо - г-н Архангельский и его "творчество" здесь (и не только здесь), мягко говоря, не в почете. И есть за что.


s_t_d   (2009-12-17 00:16:00) [5]

>Сергей М. ©   (17.12.09 00:10) [4]
А что понятно-то?
Если можете помочь - подскажите, где прочесть, а вещать полунамеками не к чему...


Сергей М.   (2009-12-17 00:10:00) [6]


> Все о DELPHI. Язык SQL в Delphi5. А.Я. Архангельский


Понятно.
Дальше можно не конкретизировать)


s_t_d   (2009-12-17 00:07:00) [7]

>Nucer
Спасибо за внимание.
1)FB-1.5  - Firebird 1.5
2)Предложенные вами варианты не проходят. Я понял так, что некорректное использование GROUP BY

>Сергей М. ©   (16.12.09 19:42) [2]
Извините, если невольно оскорбил ваш слух, но я не увидел в этом словосочетании чего-либо предосудительного... По базовому образованию далек от IT области, но иногда приходится сочинять простейшие запросы, поэтому и обратился в разде "Начинающим".
Осваивал по книге (нашел на полке у наших спецов, коих не допросишься) "Все о DELPHI. Язык SQL в Delphi5. А.Я. Архангельский. Глава 2. Основы языка SQL. Параграф 2.2.2. Совокупные характеристики, где речь и идет о понятиях count, min, max, ...". Так что по этому вопросу скорее к автору книги.

А вот как все-таки составить такой запрос ?


Сергей М.   (2009-12-16 19:42:00) [8]


> совокупные х-ки


Стесняюсь спросить - а это что ?
Про это можно говорить  при дамах ?


Nucer   (2009-12-16 19:18:00) [9]

Не уверен (не знаю что такое FB-1.5), но скорее всего так:
SELECT patients.patid, patients.lastname, COUNT(*)
FROM patients LEFT JOIN labres ON patients.patid = labres.patid
WHERE labres.date1 > '01.01.2008' AND labres.val1 > 0
GROUP BY patients.patid


Может быть, что и так:
SELECT P.patid, P.lastname, COUNT(*) AS cnt
FROM patients P LEFT JOIN labres L ON P.patid = L.patid
WHERE L.date1 > '01.01.2008' AND L.val1 > 0
GROUP BY P.patid ORDER BY cnt DESC


Наверх

Титульная страница Поиск, карта сайта Написать письмо