Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.11;
Скачать: CL | DM;

Вниз

Помогите сделать запрос...   Найти похожие ветки 

 
serko ©   (2007-01-10 21:39) [0]

Ребят привет!
У меня есть таблица с данными типа:
№ ФИО ОЦЕНКА
1 Иванов 2
2 Петров 3
3 Петров 5
4 Петров 2
5 Сидовов 5

Мне нужно сгруппировать данные (или как там правильно) что бы получилась таблица ввиде:
1 Иванов 0/1
2 Петров 2/3
3 Сидоров 1/1

т.е. отображается сколько попыток СДАЧИ ЭКЗАМЕНА было и сколько из них он сдал на положительную оценку (3<=).
Помогите сделать это рациональным способом...


 
try ©   (2007-01-10 22:12) [1]

SELECT ФИО, SUM(CAST((ОЦЕНКА/2-0.1)/2 AS INTEGER)), COUNT(*)
GROUP BY ФИО


 
serko ©   (2007-01-10 22:37) [2]

из каких это соображений выражение - CAST((ОЦЕНКА/2-0.1)/2

При активации IBDataSet выскакивает ошибка ".... Token unknown line 2 char 1 GROUP"

Че это такое?


 
try ©   (2007-01-10 23:06) [3]

1. Из соображения иметь 0, если 2, и 1, если 3, 4 или 5
2. Приводи текст реального запроса.


 
serko ©   (2007-01-10 23:22) [4]

Ну так я собственно ниче и не поменял

SELECT FIO, SUM(CAST((OCENKA/2-0.1)/2 AS INTEGER)), COUNT(*)
GROUP BY FIO

Гы... а нужно было всего навсего FROM EKZAM добавить...
И все заработало... СПАСИБО!

А можна сделать чтобы Эти данные заносились в один столбик "РЕЙТИНГ" (а не в два "SUM" и "COUNT") ввиде "3 из 10"? Как это сделать?


 
try ©   (2007-01-10 23:26) [5]

Ну да, я FROM упустил :)))


> А можна сделать чтобы Эти данные заносились в один столбик
> "РЕЙТИНГ" (а не в два "SUM" и "COUNT") ввиде "3 из 10"?
> Как это сделать?


Какая СУБД?


 
serko ©   (2007-01-10 23:34) [6]

FIREBIRD


 
try ©   (2007-01-10 23:43) [7]

SELECT
 T1.FIO,
 (SELECT SUM(CAST((T2.OCENKA/2-0.1)/2 AS INTEGER))
  FROM EKZAM T2
  WHERE T2.FIO=T1.FIO) || " из " || COUNT(*)
FROM EKZAM T1
GROUP BY FIO


 
serko ©   (2007-01-10 23:49) [8]

T1 это еще одна таблица с другой структурой?

Где можна почитать подробно о запросах?


 
try ©   (2007-01-10 23:49) [9]

Да чего там мудрить :)))
SELECT
FIO,
SUM(CAST((OCENKA/2-0.1)/2 AS INTEGER)) || " из " || COUNT(*)
FROM EKZAM
GROUP BY FIO


 
try ©   (2007-01-10 23:51) [10]


> T1 это еще одна таблица с другой структурой?


Это псевдоним (алиас) имени таблицы.


> Где можна почитать подробно о запросах?


В документации. Типа SQL Reference Help в IB.


 
serko ©   (2007-01-10 23:59) [11]

СПАСИБО И НА ТОМ!


 
brother ©   (2007-01-11 04:56) [12]

http://ibase.ru


 
serko ©   (2007-01-11 23:27) [13]


> 1. Из соображения иметь 0, если 2, и 1, если 3, 4 или 5

Незнаю почему но "3" не учитываются...

я так понимаю получается:
(2/2-0.1)/2=0,45 =0
(3/2-0.1)/2=0,7 =1 но вот данный случай почему то не проходит...
(4/2-0.1)/2=0,95 =1
(5/2-0.1)/2=1,2 =1


 
try ©   (2007-01-11 23:42) [14]


> (3/2-0.1)/2=0,7 =1 но вот данный случай почему то не проходит...


Не может быть!


 
serko ©   (2007-01-12 00:07) [15]

ну я уже несколько контрольных примеров сделал... ТРОЙКА никак не учитывается...

А че в запросе суммирования по условия нельзя сделать? ну типа OCENKA>=3 then Sum:=sum+1;


 
Johnmen ©   (2007-01-12 00:27) [16]


> serko ©   (12.01.07 00:07) [15]
> А че в запросе суммирования по условия
> нельзя сделать? ну типа OCENKA>=3 then Sum:=sum+1;


Смотря какая версия FB. Проверяй:
SUM(CASE WHEN OCENKA > 2 THEN 1 ELSE 0 END)


 
serko ©   (2007-01-12 20:34) [17]

Так то лудше! СПАСИБО!


 
serko ©   (2007-01-18 22:25) [18]


> Смотря какая версия FB. Проверяй:
> SUM(CASE WHEN OCENKA > 2 THEN 1 ELSE 0 END)


Интересное дело получается... У меня на компе все работает... А на работе не Хочет! Пишет Token unknown ..... "WHEN"

Хотя и дома и на работе одна и таже версия FIREBIRD


 
serko ©   (2007-01-19 23:22) [19]

Надо что-то еще придумать....
я вот придумал:

SELECT a.FIO,
    (SELECT COUNT(b.OCENKA)
     FROM EKZAM b
     WHERE (b.FIO=a.FIO) and (b.OCENKA BETWEEN 3 and 5)) || " из " ||
    COUNT(*)
FROM EKZAM a


Но тут другая проблема - COUNT(*) не правильно считает...


 
Johnmen ©   (2007-01-19 23:25) [20]

Этот запрос вообще не должен выполняться.


 
serko ©   (2007-01-19 23:52) [21]


> Этот запрос вообще не должен выполняться.


Значит вы в чем то ошибаетесь... Он выполняется, только не до конца правильно...


 
serko ©   (2007-01-19 23:54) [22]

там еще в конце есть:

GROUP BY a.FIO

Незнаю куда оно могло деться...


 
Johnmen ©   (2007-01-20 00:22) [23]

На каких данных неверно? (много приводить не надо)


 
serko ©   (2007-01-21 21:52) [24]


> COUNT(*) не правильно считает...


Получается число больше реального....


 
Johnmen ©   (2007-01-21 21:57) [25]

На каких данных неверно? (много приводить не надо)


 
serko ©   (2007-01-21 22:45) [26]

Что значит на КАКИХ?


 
Johnmen ©   (2007-01-21 23:18) [27]

Это значит, приводи здесь исходные данные (только немного), на которых вышеозначенный запрос неверно считает COUNT.


 
serko ©   (2007-01-21 23:26) [28]

как я их приведу? они же в базе... а данные там такие как в [0]

Запрос [7] неправильно считает первую часть, но COUNT(*) при этом правильно, а запрос [19] - наоборот...


 
Johnmen ©   (2007-01-22 01:14) [29]

Я не поленился проверить.
Все запросы, и [7], и [9], и [19] выполненные на данных из [0] возвращают ожидаемый результат, указанный в [0].
(Единственное что, так это приведение типов указывал явно, т.к. тестил под IB6. Под FB этого делать не надо).


 
serko ©   (2007-01-22 23:25) [30]

Ну незнаю...
Если есть возможность гляньте эту базу...

www.progiseregi.narod.ru/other/BASE.rar


 
Johnmen ©   (2007-01-22 23:36) [31]

Глянуть возможности нет, т.к. на этом компе нет и не будет уже FB.
На котором есть доберусь недели через 2.


 
unknown ©   (2007-01-22 23:53) [32]

Скачал базу, проверил запрос из [19]
FIO          CONCATENATION  

1            0 из 21        
2            0 из 3        
3            0 из 4        
4            0 из 13        
5            0 из 8        
6            1 из 7        
7            0 из 5        
8            0 из 6        
Андреева     3 из 31        
Боярчук      1 из 10        
Булгакова    3 из 12        
Булитко      5 из 32        
Важненко     1 из 2        
Вертегел     2 из 13        
Гнецко       1 из 19        
Горожанкина  0 из 4        
Данилова     12 из 29      
Дидык        7 из 17        
Лысенко      0 из 2        
Мазнюк       7 из 20        
Малышко      0 из 18        
Манусова     0 из 30        
Неничас      1 из 9        
Потапова     0 из 5        
Потоцкая     1 из 25        
Савчук       0 из 13        
Смирнов      1 из 1        
Строганов    8 из 53        
Сыс          3 из 18        
Тягунов      2 из 14        
Чернова      0 из 23        

Все верно.
p.s.
А для ответов я бы отдельную таблицу сделал.


 
serko ©   (2007-01-23 22:17) [33]

Да уж, я тоже уже убедился что все правильно...
Копался, копался и нашел...


> А для ответов я бы отдельную таблицу сделал.

Чем она в этой таблице мешает?


 
unknown ©   (2007-01-23 23:29) [34]


> serko ©   (23.01.07 22:17) [33]
>
> Чем она в этой таблице мешает?

Какое-то неправильное поле
otveti char(200)
с содержимым типа
4601-5=5, 4602-4=4, 4603-3=3, 4604-4=4, 4605-2=4, 4606-3=2, 4607-4=4, 4608-4=4, 4609-2=2, 4610-1=1, 4611-3=3, 4612-4=4, 4613-2=2, 4614-1=1, 4615-4=4, 4616-2=2, 4617-2=2, 4618-1=1, 4619-3=3, 4620-3=3,
Насколько я понял, это результаты тестирования.
В тестах ведь кол-во ответов фиксировано? Значит можно организовать
отдельную таблицу с этими ответами.


 
unknown ©   (2007-01-23 23:36) [35]

Даже если кол-во ответов не фиксировано, всеравно можно в отдельную
таблицу вынести :)


 
serko ©   (2007-01-24 22:43) [36]

Не вижу я привелегий, чтобы заводить еще одну таблицу...
Это поле только для информации о номере вопроса, его ответа и тот варинт который выбран...



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

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.041 c
15-1169284397
Piroxyline
2007-01-20 12:13
2007.02.11
Спам


4-1159027456
Чапаев
2006-09-23 20:04
2007.02.11
Запись строкового ресурса


3-1164090508
Ein
2006-11-21 09:28
2007.02.11
Как просмотреть содержимое поля OLE в базе данных


15-1168954980
Piter
2007-01-16 16:43
2007.02.11
Устройство АБС


3-1163764708
DelphiLexx
2006-11-17 14:58
2007.02.11
Как определить измененные записи, FIBDataSet и CacheUpdate





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