Конференция "Базы" » Прошу, помогите разобраться с SQL запросом
 
  • Vainu (29.03.17 23:05) [0]
    Здравствуйте!
    Я мало знаком с SQL, но по работе приходится составить один запрос.

    Есть таблица:

    Дата         Сайт                 Категория
    26.03.2017 mir-vnutri.ru 4-х комнатные
    26.03.2017 lidgroup.ru         2-х комнатные
    26.03.2017 mir-vnutri.ru 2-х комнатные

    КАТЕГОРИЯ   Сайт                Дата
    Х                  РД_1                 01.02.17
    А                  РД_1                 02.02.17
    А                  РД_2                 02.02.17
    А                  РД_1                 03.02.17
    Б                  РД_3                 02.02.17            
    Б                  РД_2                 03.02.17
    В                  РД_1                 02.02.17
    У                  РД_1                 04.02.17

    Хочу составить запрос, который бы вывел Категории, Сайты и их "долю голоса".

    Т.е. нужно вывести сайты и то, сколько раз они встречается в выгрузке, согласно ограничениям.

    Пример:
    При ограничении даты с 02 по 03: Для всей таблицы доля РД_1=50%(3/6), а для Категории "А", его доля равна 66%(2/3).

    При таком запросе:

    form1.ADOQuery1.SQL.Clear;
    SQL.Lines.Add('SELECT Недвижимость.Категория, Недвижимость.Сайт, Count(Недвижимость.Сайт) AS [Показов_в_категории],');
    SQL.Lines.Add('Count([Сайт])/DCount(\"Категория\",\"Недвижимость\",\"Категория=''\" & [Категория] & \"''\") AS [%Доля_в_категории],');
    SQL.Lines.Add('Count([Сайт])/DCount(\"Категория\",\"Недвижимость\") AS [Доля_за_период]');
    SQL.Lines.Add('FROM (SELECT * FROM Недвижимость WHERE (Дата BETWEEN :d1 AND :d2) AND (Время BETWEEN :t1 AND :t2))');
    SQL.Lines.Add('GROUP BY Недвижимость.Категория, Недвижимость.Сайт;');
    form1.ADOQuery1.SQL.Text:=SQL.Text;
    form1.ADOQuery1.Parameters.ParamByName('d1').Value := datetostr(DatePicker1.Date);
    form1.ADOQuery1.Parameters.ParamByName('d2').Value := datetostr(DatePicker2.Date);
    form1.ADOQuery1.Parameters.ParamByName('t1').Value := timetostr(TimePicker1.Time);
    form1.ADOQuery1.Parameters.ParamByName('t2').Value := timetostr(TimePicker2.Time);
    form1.log.Lines.Add(ADOQuery1.Parameters.ParamByName('d1').Value);
    form1.log.Lines.Add(ADOQuery1.Parameters.ParamByName('d2').Value);
    form1.log.Lines.Add(ADOQuery1.Parameters.ParamByName('t1').Value);
    form1.log.Lines.Add(ADOQuery1.Parameters.ParamByName('t2').Value);
    ADOQuery1.open;
    ADOQuery1.Active := true;



    Суммирование происходит по всей базе, а не по базе с ограничением по дате..
    Кто нибудь подскажет как это исправить?

    И ещё один момент
    Для всей базы выгружаются Категории, Сайты и корректно отображается доля сайта для каждой из категории. А вот доля относительно базы, выгружается некорректно. Она становится правильной, если в итоговой выгрузке просуммировать доли по одинаковым сайтам по всем категориям. Как с этим бороться?
    Пожалуйста. отзовитесь! СпасибО!
  • stas © (29.04.17 12:03) [1]
    какая СУБД ?
 
Конференция "Базы" » Прошу, помогите разобраться с SQL запросом
Есть новые Нет новых   [134427   +34][b:0][p:0.001]