Главная страница
    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-63793
Г.Каспаров
2003-02-03 17:31
2003.02.20
Ищу кряк к DeepBlue


14-63761
RV
2003-02-03 15:52
2003.02.20
Перепись населения .....уже N+1 или Гоголь отдыхает


14-63738
Тип
2003-02-05 13:07
2003.02.20
Есть ли FIBPlus для D6 полность бесплатные?


7-63868
bytebutcher
2002-12-07 02:59
2003.02.20
Формат ISO образов CD и запись на CDR


7-63885
Tolea
2002-12-18 16:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский