Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];

Вниз

SQL   Найти похожие ветки 

 
z_olga_al   (2003-02-02 16:10) [0]

орогие Мастера!
Простите за назойливость но...
Почему в этом запросе результат выполнения функции COUNT(A.COD_POST)
получается в виде произведения
( COUNT(A.COD_POST) *COUNT(B.COD_POST)) , а мне нужно получить
количество записей за период времени указанный в условии WHERE
и почему при выполнении обьединения по LEFT не выводятся записи которые
не совпадают за указанные периоды времени, т.е, записи присутствующие
в одной таблице и не присутствующие в другой хотя во всех книгах говорится,
что к записям одной таблицы, для которых не найдется ответных частей второй таблицы будут пристыкованы "пустые" записи второй таблицы.

SELECT A.KOD_POST,COUNT(A.KOD_POST),avg(A.p0003),avg(A.V0005),
B.KOD_POST,COUNT(B.KOD_POST),avg(B.p0003),avg(B.V0005)

FROM "ANALIZ.DB" A LEFT join "ANALIZ.DB" B ON (A.KOD_POST=b.kod_post)


where (A.DAT_PROB between "01.01.2002" and "31.12.2002") AND (B.DAT_PROB between "01.01.2001" and "31.12.2001")

group by A.KOD_POST,b.KOD_POST

С глубочайшим уважением

Ольга <z_olga_al@ukr.net>


 
Олег   (2003-02-02 17:52) [1]

Ответ на первый вопрос:
Допустим в твоей таблице в первом диапазоне дат 100 записей с A.KOD_POST = 1, а во втором диапазоне дат 10 записей с B.KOD_POST = 1. Тогда запрос для каждой из 100 записей из первого диапазона дат вернет все 10 записей из второго диапазона дат (ведь A.KOD_POST и B.KOD_POST совпадают). И когда ты сгруппируешь по A.KOD_POST, который везде равен 1, то получишь произведение 100*10=1000. Если ты хочешь, чтобы COUNT(A.KOD_POST) равнялся 100, то считай его отдельно в подзапросе, типа:
SELECT COUNT(C.KOD_POST) FROM "ANALIZ.DB" C WHERE (C.KOD_POST=A.KOD_POST) AND (C.DAT_PROB between "01.01.2002" and "31.12.2002"),
который вставь в основной запрос вместо COUNT(A.KOD_POST)

Ответ на второй вопрос:
Действительно, если JOIN-ить таблицы по LEFT, то запрос при отсутствии связанной записи во второй таблице вернет пустые поля. В твоем примере он это и делает, но ты отсекаешь эти записи вторым условием во WHERE, поскольку B.DAT_PROB тоже пустое и не может быть between чем-нибудь.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
14-63821
Holy
2003-02-04 13:01
2003.02.20
Харьковчане есть ?


1-63613
fame
2003-02-11 13:58
2003.02.20
Перевод десятичного числа в двоичное и обратно.


3-63561
Engel
2003-02-01 20:34
2003.02.20
Делаю прогу, чтоб можно было взять список таблиц и полей из БД.


6-63716
NewGuest
2002-12-21 13:06
2003.02.20
UDPAntiFreeze


1-63644
_saha_
2003-02-11 19:30
2003.02.20
потоки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский