|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 16 февраля 2010, 08:38
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 15; последнее сообщение — 18 февраля 2010, 20:10; участников в обсуждении: 4.
|
Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 14:26 [#1]:
в смысле вывести только название предмета, а по конкретнее можно?
Я так понял вы хотите создать таблицу, где отображаются данные? Так может тогда не нужно эти данные туда выводить вообще, которые не должны там видны
|
|
vikki (статус: Посетитель), 16 февраля 2010, 16:24 [#2]:
таблица игрушечная, это понятно, но сам ? в принципе имеет смысл. я так понимаю, что необходим вложенный запрос к одной и той же таблице.
|
|
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 (статус: 1-ый класс), 16 февраля 2010, 17:05 [#5]:
забыл. Установка параметров запроса с помощью метода ParamByName
with Query1 do begin
ParamByName('predmet').AsString:= 'Математика';
ParamByName('student').AsString:= 'фамилия';
ParamByName('ocenka').AsIntegr:= 5;
end;
|
|
vikki (статус: Посетитель), 16 февраля 2010, 17:05 [#6]:
с компонентом TQuery понятно, спасибо.
а все-таки меня интересует интерактивный SQL, например в приложении SQL Explorer.
|
|
Alexey6522 (статус: 1-ый класс), 16 февраля 2010, 17:06 [#7]:
не могу выполнить запрос: название предмета, по которому наибольшее количество 5.
помогите плз)
|
|
Мережников Андрей (статус: Абитуриент), 16 февраля 2010, 21:30 [#8]:
для того, чтобы правильно сформировать запрос необходимо знать с какой СУБД работаете (MySQL,MS SQL или что-то еще). Поскольку здесь необходим составной SQL запрос
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 17 февраля 2010, 23:00 [#13]:
да, видимо так, но обидно)((
вроде запрос и реальный, но увы
|
|
Мережников Андрей (статус: Абитуриент), 18 февраля 2010, 05:37 [#14]:
MS SQL - такие запросы выполняет
как вариант в Вашем случае - разбить на 2 запроса: в первом найти максимальное число 5 по предметам, во втором - название(я) предмета(ов) с максимальным количеством 5.
|
|
vikki (статус: Посетитель), 18 февраля 2010, 20:10 [#15]:
спс
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|