Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 778

/ вопрос открыт /

Здравствуйте, эксперты!
у меня вопрос по SQL-запросу,
простенькая база
create table t2(fio varchar(20), predmet(25), ocenka integer)
отражает успеваемость студентов по предметам.
не могу выполнить запрос: название предмета, по которому наибольшее количество 5.
помогите плз)
мой лучший результат
select predmet, count(*)
from t2 t2_out
where ocenka=5
group by predmet
а как вывести только название премета?

vikki Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: vikki (статус: Посетитель)
Вопрос отправлен: 16 февраля 2010, 08:38
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 18 февраля 2010, 20:10; участников в обсуждении: 4.
Alexey6522

Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 14:26 [#1]:

в смысле вывести только название предмета, а по конкретнее можно?
Я так понял вы хотите создать таблицу, где отображаются данные? Так может тогда не нужно эти данные туда выводить вообще, которые не должны там видны
vikki

vikki (статус: Посетитель), 16 февраля 2010, 16:24 [#2]:

таблица игрушечная, это понятно, но сам ? в принципе имеет смысл. я так понимаю, что необходим вложенный запрос к одной и той же таблице.
Alexey6522

Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 16:56 [#3]:

каким компонентом пользуетесь??? TQuery
Query1.Prepare;
try
 {Выполнение запроса}
 for i:= 1 to 100 do begin
  {Определение параметров запроса}
 Query1.ParamByName('SomeParam').AsInteger := i;
 Query1.ParamByName('SomeOtherParam').AsString := SomeString;
 Query1.Open; //Открытие запроса
  try
   {Здесь можно использовать полученный результат}
  finally
   Query1.Close; //Закрытие запроса
  end;
 end;
finally
 Query1.Unprepare; //Освобождение запроса
end;
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 16 февраля 2010, 16:58 [#4]:

Для наложения условий на группируемые поля вроде как HAVING существует, разве нет?
Alexey6522: внимательнее читайте вопрос. Я думаю, человек в состоянии выполнить запрос.
Alexey6522

Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 17:05 [#5]:

забыл. Установка параметров запроса с помощью метода ParamByName
with Query1 do begin
 ParamByName('predmet').AsString:= 'Математика'; 
 ParamByName('student').AsString:= 'фамилия';
 ParamByName('ocenka').AsIntegr:= 5;
end;
vikki

vikki (статус: Посетитель), 16 февраля 2010, 17:05 [#6]:

с компонентом TQuery понятно, спасибо.
а все-таки меня интересует интерактивный SQL, например в приложении SQL Explorer.
Alexey6522

Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 17:06 [#7]:

не могу выполнить запрос: название предмета, по которому наибольшее количество 5.
помогите плз)
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 16 февраля 2010, 21:30 [#8]:

для того, чтобы правильно сформировать запрос необходимо знать с какой СУБД работаете (MySQL,MS SQL или что-то еще). Поскольку здесь необходим составной SQL запрос
vikki

vikki (статус: Посетитель), 16 февраля 2010, 22:06 [#9]:

работаем с БД PARADOX в SQL Explorer DELPHI 7.0.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 17 февраля 2010, 05:58 [#10]:

select predmet,count(*)
from t2
where ocenka=5
group by predmet
having count(*)=
(select max(nn) from
(select predmet,count(*) as nn
from t2
where ocenka=5
group by predmet))

Хотя данный запрос может вызвать ошибку если пятерок не будет вообще ни по одному предмету
vikki

vikki (статус: Посетитель), 17 февраля 2010, 10:26 [#11]:

спс,
но SQL Explorer DELPHI 7.0
дает ошибку:
Invalid use of keyword.
Token: Select
Line Number:7
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 17 февраля 2010, 18:12 [#12]:

значит Paradox не поддерживает такого вложения запросов. :-(
vikki

vikki (статус: Посетитель), 17 февраля 2010, 23:00 [#13]:

да, видимо так, но обидно)((
вроде запрос и реальный, но увы
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 18 февраля 2010, 05:37 [#14]:

MS SQL - такие запросы выполняет
как вариант в Вашем случае - разбить на 2 запроса: в первом найти максимальное число 5 по предметам, во втором - название(я) предмета(ов) с максимальным количеством 5.
vikki

vikki (статус: Посетитель), 18 февраля 2010, 20:10 [#15]:

спс

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:25
Выполнено за 0.03 сек.