Главная страница
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.55 MB
Время: 0.045 c
15-1168984170
Tirael
2007-01-17 00:49
2007.02.11
основной шлюз


3-1163662919
oracle.nooby
2006-11-16 10:41
2007.02.11
Oracle через ADO


15-1169417054
Xyper
2007-01-22 01:04
2007.02.11
AT команды


2-1169172209
NovaC
2007-01-19 05:03
2007.02.11
IP Адресс, DNS, WINS


2-1169546929
Sventitskiy
2007-01-23 13:08
2007.02.11
Смена разделителя дробной части