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

Вниз

Выражения в агрегатных функциях   Найти похожие ветки 

 
Nimfa ©   (2005-06-12 14:44) [0]

Помогите посчитать в таблице REG(Client, Tp, Vid) с помощью запроса сумму по полю TP, где Vid = ‘ТТ’ и в другом поле запроса сумму по полю TP, где Vid = ‘TNP’. Group by по полю Client.
Пробовала писать: sum(case where Vid = "TT" then TP else 0 end) -не работает.


 
Zacho ©   (2005-06-12 20:06) [1]

1. В IB нет case. Да для этой цели и не нужно.
2. RTFM WHERE

P.S. Как ты думаешь, здесь телепаты собрались ? Или всё-таки вместо "не работает" стоит написать как именно не работает ?


 
Nimfa ©   (2005-06-13 11:47) [2]

Ну раз case в IB нет, то и ошибка очевидна: Invalid keyword. Token:when. Тогда почему when, а не case?
И можно по подробней про "RTFM WHERE"?


 
Zacho ©   (2005-06-13 11:53) [3]

Nimfa ©   (13.06.05 11:47) [2]
то и ошибка очевидна:


Это ещё не повод, что бы её не приводить. А вдруг ситуация была бы не такой очевидной ?
Кстати, case есть в FB 1.5

Nimfa ©   (13.06.05 11:47) [2]
И можно по подробней про "RTFM WHERE"?


Насколько я понял твой вопрос, никакие case тебе не нужны, а нужен простой запрос:

SELECT SUM(TP) FROM REG WHERE VID="TT" GROUP BY CLIENT


 
Anatoly Podgoretsky ©   (2005-06-13 12:00) [4]

Zacho ©   (13.06.05 11:53) [3]
Гыы, так она же хочет
SELECT SUM(TP WHERE VID="TT") as S1,  SUM(TP WHERE VID="TNP")  as S2 FROM REG GROUP BY CLIENT


 
Zacho ©   (2005-06-13 12:09) [5]

Извеняюсь, был не прав, невнимательно прочитал вопрос,


 
Zacho ©   (2005-06-13 12:24) [6]

Вот решения:
1. Для IB 6.x

select distinct R.CLIENT,
(SELECT SUM(R2.TP) FROM REG R2 WHERE R2.CLIENT=R.CLIENT and R2.VID="TT"),
(SELECT SUM(R3.TP) FROM REG R3 WHERE R3.CLIENT=R.CLIENT and R3.VID="TNP")
FROM REG R


2. Для FB 1.5

SELECT
 R.CLIENT,
 SUM(CASE R.VID WHEN "TT" THEN R.TP ELSE 0 END),
 SUM(CASE R.VID WHEN "TNP" THEN R.TP ELSE 0 END)
FROM REG R
GROUP BY R.client


 
Anatoly Podgoretsky ©   (2005-06-13 12:32) [7]

Не завидую, для первого будет декартово произведение, для второго полное сканирование таблицы, ты правда тут ни причем :-)
Не знаю задачи, но если допустимо, то два независимых запроса с отдельными датасет, при желании результат куда ни будь, в массив, в ClientDataSet и т.д.


 
Zacho ©   (2005-06-13 15:45) [8]

Anatoly Podgoretsky ©   (13.06.05 12:32) [7]
Не завидую, для первого будет декартово произведение


Где ??? Или под "декартовым произведением" я понимаю что-то другое ?

> для второго полное сканирование таблицы

Возможно. А может и нет. Я не знаю, как работает оптимизатор FB 1.5

А, вообще, согласен, запрос будет довольно медленный в обоих случаях. Я бы сделал двумя запросами или ХП.


 
Anatoly Podgoretsky ©   (2005-06-13 15:57) [9]

Для каждого R.CLIENT будет вызывать подзапрос, точнее даже два.

По второму случаю придется просмотреть всю таблицу, поскольку во WHERE не удастся включить два независимых условия.


 
Zacho ©   (2005-06-13 16:18) [10]

Anatoly Podgoretsky ©   (13.06.05 15:57) [9]
Для каждого R.CLIENT будет вызывать подзапрос, точнее даже два.


Естествнно, но это не декартово произведение, это аналог внешнего соединения трёх таблиц. Кстати, этот запрос вполне можно написать с LEFT JOIN.

Anatoly Podgoretsky ©   (13.06.05 15:57) [9]
По второму случаю придется просмотреть всю таблицу


Скорее всего именно так. Согласен.
Но точно не знаю, и проверить сейчас не могу :)


 
Anatoly Podgoretsky ©   (2005-06-13 16:31) [11]

Декартово, в смысле что будет Client*Client расчетов, а не Client*Client записей


 
Zacho ©   (2005-06-13 16:36) [12]

Anatoly Podgoretsky ©   (13.06.05 16:31) [11]

Это да, сразу не понял, был (и есть) несколько нетрезв :)


 
Anatoly Podgoretsky ©   (2005-06-13 17:03) [13]

С празником :-)



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

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

Наверх





Память: 0.47 MB
Время: 0.011 c
4-1117344959
NikNet
2005-05-29 09:35
2005.07.25
Как получить адресс строкий? Const MyStr:String = Hello! ;


1-1120759192
Voland
2005-07-07 21:59
2005.07.25
Можно ли определить, _что_ нужно нажимать для вставки символа?


14-1120200294
Sha
2005-07-01 10:44
2005.07.25
Пятница - задача - снова монеты


1-1120677761
vova3085
2005-07-06 23:22
2005.07.25
поиск в ListBox


6-1113409952
Ландграф Павел
2005-04-13 20:32
2005.07.25
idFTP одновременная запись в файл





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