Главная страница
    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
3-63519
asd
2003-02-02 23:08
2003.02.20
как через дельфи в 1с в справочник добавить элемент


1-63675
Zirus
2003-02-12 09:40
2003.02.20
Про иконки и новую форму в панели задач


14-63796
DarkGreen
2003-02-04 07:40
2003.02.20
Delphi License


3-63579
Senator
2003-02-04 10:48
2003.02.20
Запуск программы


3-63583
alex_bredin
2003-02-04 11: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
Английский Французский Немецкий Итальянский Португальский Русский Испанский