Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Формирования запросов из базы данных  (Прочитано 25522 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Aleksandr
Интересующийся

ru
Offline Offline

« : 28-10-2008 08:59 » 

Помогите разобраться. Необходимо вывести сведения о мужчинах, родившихся с 1 января по 1 апреля заданого года. Существует две базы ( два файла_(Group и Study) В одной находиться номе студента, фамиоия, имя, пол, в другой - номер студента,  названия предмета, оценка (балл)
Пишу Select distinct family, name, ball from  group, study where pol="м" and date between {01/01/85} and {01/04/85}  Выводиться нормально, но мне необходимо также вывести поле ball ( для этого добавляю это поле) - выводиться одна и таже фамилия несколько раз. Как это избежать? 
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #1 : 28-10-2008 09:07 » 

Aleksandr, group by ...
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #2 : 28-10-2008 09:23 » 

Не совсем понял. Если можно поподробнее
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #3 : 28-10-2008 09:32 » new

Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной в FROM таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 28-10-2008 09:33 » 

Иванов Иван 5
Иванов Иван 4
Петров Петр 3
Петров Петр 2

Как ты себе представляешь выбор?

зы в plsql возможно следующее форматирования листинга

Иванов Иван 5
                      4
Петров Петр 3
                      2

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #5 : 28-10-2008 09:51 » 

Пишу select distinct family, name, subject from group, study where sex="м" and date between {01/01/85} and {01/04/85}
Получыется Иванов    Сергей    Информатика
           Иванов    Сергей    математика
           Иванов    Сергей    ИСТОРИЯ
в ПРИНУИПЕ ВСЕ НОрмально, но мне надо чтобы еще и оценки выводились (поле ball) добавляю поле ball
select distinct family, name, subject, ball from group, study where sex="м" and date between {01/01/85} and {01/04/85}
Получается Иванов   Сергей     Информатика  3
           Иванов   Сергей     Информатика  4
           Иванов   сергей     Информатика  3
           Иванов   Сергей     История      3
           Иванов   Сергей     История      4
           Иванов   Сергей     История      5
           Иванов   Сергей     Математика   5
           Иванов   Сергей     Математика   4
           Иванов   Сергей     Математика   5
Записи повторяются, как сделать
           Иванов    Сергей     информатика 3
           Иванов    Сергей     математика  4
           Иванов    Сергей     история     5
Причем если не пишу поле ball то все нормально, только нет оценок. А если не пишу поле subject , а  ball пишу то тоже все нормально только неть названия предметов. А мне надо чтобы и то и то былоо. Если не сложно помоги , пожалуйста

           
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 28-10-2008 09:56 » 

Aleksandr, критерий(условие) по выбору bal?
какую оценку тебе нужно выбрать? максимальную, минимальную, может посчитать среднюю? по предмету? по человеку?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #7 : 28-10-2008 10:10 » 

Мне просто нужно вывести фамилии. названия предметов и оценки отдельно для мужчин и женщин.
Вообще нужно Чтобы было примерно так Иванов   Сергей  информатика 5
                                     Иванов   Сергей  математика  3
                                     Иванов   Сергей  история     4
                                     Петров   Антон   Информатика 3
                                     Петров   Антон   математика  4
                                     Петров   Антон   история     5
                                   и для женщин
                                     Соколова  Ира     информатика 3
                                     Соколова  Ира     математика  4
                                     Соколова  Ира     история     5
Записан
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #8 : 28-10-2008 10:23 » 

Пишу  select distinct family, subject from group, study where sex="м"
Получается Иванов   информатика 
           Иванов   математика
           Иванов   История
           Петров   информатика
           Петров   математика
           Петров   история
В принципе все нормально но мне надо чтобы и оценки выводились тоже, но как только добавляю пле ball
select distinct family, subject, ball where sex= "м"
получается
            Иванов   информатика   3
            Иванов   информатика   4
            Иванов   инворматика   5
            Иванов   математика    5
            Ивано    математика    3
            Иванов   математика    4
            Иванов   история       3
            Иванов   история       4
            Иванов   история       5
Почему повторяется как сделать чтобы не повторялось?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 28-10-2008 10:24 » 

Select distinct family, name, ball from  group, study
where pol="м" and date between {01/01/85} and {01/04/85}
order by pol

Кстати, у тебя в запросе не связаны таблицы group и   study
Таким образом у тебя происходит декартово умножение таблиц.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #10 : 28-10-2008 10:31 » 

Круто. Получилось. Спасибо большое выручил, сижу целый день. Ты говоришь у мення в запросе не связаны таблицы group и  study , А КАК ИХ СВЯЗАТЬ?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 28-10-2008 10:34 » 

какая структура таблиц? приведи названия полей
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #12 : 28-10-2008 10:51 » 

Таблица GROUP СТРУКТУРА   ИМЯ ПОЛЯ            ТИП ПОЛЯ     
                          NSTUD               ЧИСЛОВОЕ
                          FAMILY              СИМВОЛЬНОЕ
                          POL                 СИМВОЛЬНОЕ
                          DATE                 ДАТА
ТАБЛИЦА study             

                          NSTUD
                          SUBJECT
                          BALL

 А как можно добавить в эту записьSelect distinct family, name, ball from  group, study
where pol="м" and date between {01/01/85} and {01/04/85}
order by pol  Поле subject  чтобы также выводилось Б но еще и названия предмета ваводилось рядом с оценкой?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 28-10-2008 11:01 » 

Таблица GROUP СТРУКТУРА   ИМЯ ПОЛЯ            ТИП ПОЛЯ     
                          NSTUD               ЧИСЛОВОЕ
                          FAMILY              СИМВОЛЬНОЕ
                          POL                 СИМВОЛЬНОЕ
                          DATE                 ДАТА
ТАБЛИЦА study             

                          NSTUD
                          SUBJECT
                          BALL

1.
select Family, Subject, Ball
from Group
left  join study on group.nstud=study.nstud
where pol="м" and date between {01/01/85} and {01/04/85}
order by pol
2.
a)  select Family, Subject, Ball
from Group
 join study on group.nstud=study.nstud
where pol="м" and date between {01/01/85} and {01/04/85}
order by pol
b)   select Family, Subject, Ball
from Group, study
where pol="м" and date between {01/01/85} and {01/04/85}
 and group.nstud=study.nstud
order by pol

предпочтительней первый вариант
тогда выведутся все студенты, которые даже не имеют оценок по предметам
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #14 : 28-10-2008 11:30 » 

Пишу  как ты сказал select Family, Subject, Ball from Group left  join study on group.nstud=study.nstud where pol="м" and date between {01/01/85} and {01/04/85} order by pol
Выдает ошибку unrecognised phrase/ keybord in komand  Помоги напиши совсеми пробелами команду чтобы до меня дошло?
Записан
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #15 : 28-10-2008 11:45 » 

Извини, все понятно спасибо большое. Еще вопрос можно?  как вычеслить количество студентов, имеющих оценки 3, 4, 5 (запрос с группировкой по полю Ball)  Подскажи . пожалуйста
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 28-10-2008 11:50 » 

чего?
unrecognised phrase/ keybord in komand


может
unrecognised phrase/ keyword in comand


твой select работал?

покажи рабочий select, используя тэги [code][/code]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #17 : 28-10-2008 11:56 » 

Извини, все понятно спасибо большое. Еще вопрос можно?  как вычеслить количество студентов, имеющих оценки 3, 4, 5 (запрос с группировкой по полю Ball)  Подскажи . пожалуйста
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 28-10-2008 12:01 » 

count
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #19 : 28-10-2008 12:12 » 

select ball,count(*), а дальше не пойму Приведи всю строку пожалуйста?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 28-10-2008 12:27 » 

Aleksandr, не приведу - вредный я - смотри в сторону group by
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #21 : 28-10-2008 12:41 » 

Спасибо.
Записан
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #22 : 28-10-2008 15:28 » 

чТО ТО НЕ ВЫХОДИТ, фамилию студента, имеющего максимальный номер полиса вывел. а вычеслить количество студентов, имеющих оценки  3, 4, 5 не получаетсяю.
select ball, count(*) from study group by ball.  не получается выводит лишь количество троек, четверок, пятерок. А как вычеслить количество студентов имеющих 3, 4, 5
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 28-10-2008 16:02 » 

select ball, count(*) from study,goup
where group.nstud=study.nstud
group by ball
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #24 : 28-10-2008 16:48 » 

select ball, count(*) from study,goup where group.nstud=study.nstud group by ball получается    ball  Cnt
                                                                                                 3      13
                                                                                                 4       7
                                                                                                 50      10
 тоесть посчитывается сколько всего троек, четверок, пятерок. А как  вычислить количество  количество студентов , имеющих оценки 3, 4, 5 
Записан
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #25 : 28-10-2008 17:33 » 

   NSTUD       структура таблицы
   SUBJECT
   BALL
 данные таблицы
     nstud           subject          ball
      1            информатика          3
      1             математика          4
     1              история             5

      2             информатика         5
      2             математика          3
      2             история             4


необходимо вычеслить количество студентов  имеющих оценки  3, 4, 5 ( запрос с группировкой по полю ball)



Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #26 : 28-10-2008 20:47 » 

если позволяет язык (диалект), то пишите так
count(distinct nstud)
Записан

I Have Nine Lives You Have One Only
THINK!
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #27 : 29-10-2008 05:38 » 

SELECT BALL, COUNT(DISTINCT NSTUD) FROM STUDY1 GROUP BY BALL Получилось. Спасибо за помощь
Записан
Aleksandr
Интересующийся

ru
Offline Offline

« Ответ #28 : 29-10-2008 05:38 » 

Большое спасибо всем кто мне помогал
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines