SQL-запрос | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Во первых, спасибо всем лисоводам форума, кто помогал мне осваивать Фокс и не бурчал на наивность, а иногда и глупость вопросов. Ваша помошь для меня очень важна.
Позвольте задать еще один вопрос (или точнее проконсультироваться). Дано: Таблица (lcTableName) с полями FileNameID (идентификационный номер файла, откудо взято слово), SubWord (само слово), Frequency (частота слова в данном файле). Вопрос: Как сделать запрос так, чтобы из этой таблицы (lcTableName) получить таблицу (lcTableInterval) c полями SubWord (то же что и в таблице (lcTableName)), interval_0, interval_1, interval_2, interval_3, interval_4, interval_5, interval_6, interval_7 где: interval_0 - поле соответствующее количеству файлов в которых частота данного слова будет равна 0 interval_1- поле соответствующее количеству файлов в которых частота данного слова будет лежать в промежутке от 0 до 0.000001 interval_2 - -//- в промежутке от 0.000001 до 0.00001 interval_3 - -//- в промежутке от 0.00001 до 0.0001 interval_4 - -//- в промежутке от 0.0001 до 0.001 interval_5 - -//- в промежутке от 0.001 до 0.01 interval_6 - -//- в промежутке от 0.01 до 0.1 interval_7 - поле соответствующее количеству файлов в которых частота данного слова будет больше 0.1 (Соответственно, если в таблице 5 файлов (с идентификационными номерами 1, 2, 3, 4, 5) и данное слово присутствует во всех файлах, то сумма значений полей interval_0,...interval_7 для данного слова будет равна 5.) Как концептуально это делать? Можно ли обойтись только SQL-запросом или нет? (Все что придумал на данный момент слишком громоздко и не практично). Пример таблицы (lcTableName) http://www.rusl.ru/img/fox-screen6.gif Отредактировано (25.02.05 18:55) ------------------ |
Re: Можно или нет? | |
---|---|
Владимир Максимов Сообщений: 14097 Откуда: Москва Дата регистрации: 02.09.2000 |
-) Подсчитать количество не существующих записей в принципе невозможно. в данном случае поле interval_0 будет содержать количество таблиц, в которых данное слово используется. Т.е. для определения количества таблиц, где данное слово НЕ используется надо просто вычесть это число из общего количества таблиц -) Интервалы надо задать НЕ пересекающиеся. В твоем пример, например, при частоте 0.01 будет увеличено как значение поля interval_5, так и значение поля interval_6. ------------------ |
Re: Можно или нет? | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Спасибо Владимир! (Ваши коды всегда удивляют меня, как красиво можно решить проблему
Смотрю сейчас, отчего здесь выскакивает ошибка: http://www.rusl.ru/img/fox-screen7.gif |
Re: Можно или нет? | |
---|---|
Игорь Л. Сообщений: 164 Откуда: Евпатория Дата регистрации: 26.11.2003 |
У тебя просто имеется пробельная строка... если она тебе нужна (в чем сомневаюсь) то в ней поставь точку с запятой ( ; )
------------------ И все мы делаем! Козьма Прутков |
Re: Можно или нет? | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Да. Я уже понял.
Но теперь не легче http://www.rusl.ru/img/fox-screen8.gif |
Re: Можно или нет? | |
---|---|
Joys Сообщений: 3511 Откуда: Старая Русса Дата регистрации: 25.06.2000 |
2rusl
Просьба придерживаться правил форума а именно Цитата: |
Re: Можно или нет? | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Хорошо. Постараюсь формулировать более конкретно. Спасибо за конструктивную критику.
|
Re: Можно или нет? | |
---|---|
Владимир Максимов Сообщений: 14097 Откуда: Москва Дата регистрации: 02.09.2000 |
Добавь пробелов непосредственно перед символами "точка с запятой". Вероятно отсутсвие пробела приводит к "склеиванию" строк, т.е., например, фрагмент
После компиляции и "вытягивании" в одну строку принял вид
Т.е. ключевое слово FROM оказалось не обрамлено пробелами (нет пробела между interval_7 и FROM). Т.е. анализатор его не увидел и посчитал всю команду синтаксически некорректной. ------------------ |
Re: Можно или нет? | |
---|---|
Игорь Л. Сообщений: 164 Откуда: Евпатория Дата регистрации: 26.11.2003 |
Нет, дело не в этом, там же есть переносы строк - это то же разделитель...
Здесь дело в порядке следования слов в операторе SELECT - насколько я знаю, порядок здесь критичен Скорее всего здесь бьется GROUP BY должна находиться перед INTO .... ------------------ И все мы делаем! Козьма Прутков |
Re: Можно или нет? | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Ошибка не появляется. Но...
Странная штука выходит. Вроде все сработало но как то странно. Честно говоря пока еще не понял что Фокс посчитал, но похоже что то не то... Хотя обидно, ведь все вроде правильно... По идее сумма всех интервалов для каждого слова должна равняться 19 (так как у меня 19 файлов). Видимо я где то ошибся. Может в цикле. Надо поразбираться. Спасибо всем за участие http://www.rusl.ru/img/fox-screen9.gif Цитата:Посмотрел в синтаксис SELECT, GROUP BY стоит после INTO... Так что скорее всего глючило из-за амперсанта перед названием курсора.
Отредактировано (25.02.05 23:25) ------------------ |
© 2000-2024 Fox Club  |