Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HAVING MAX??? 
V
    Опции темы
Killer_13
  Дата 2.11.2011, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Я делаю запрос потом сне с запроса нужно найти максимальное значение.
Делаю вот так

Код
SELECT name,sum(strafen.betrag)
FROM strafen,spieler
WHERE spieler.spielernr=strafen.spielernr
GROUP BY name
HAVING max(strafen.betrag)>0

В строчке нужно обязательно что-то указывать. 
А если я не знаю какое у меня будет максимальное число? У меня несколько полей с числами - нужно найти максимальное
HAVING max(strafen.betrag)>0

Почему просто
HAVING max(strafen.betrag)
не срабатывает?
Спас.
PM MAIL   Вверх
Данкинг
Дата 2.11.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



А не проще сделать запрос с order by... по убыванию и взять top 1 ?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Killer_13
Дата 2.11.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



вариант, но хочется знать как сделать так как я спросил. Если знаете - подскажите пож.
PM MAIL   Вверх
Zloxa
Дата 3.11.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Killer_13 @  2.11.2011,  18:46 Найти цитируемый пост)
А если я не знаю какое у меня будет максимальное число? 

ничтно не мешает его узнать
Код

having max(strafen.betrag) = (select max(strafen.betrag) from strafen)



Цитата(Killer_13 @  2.11.2011,  18:46 Найти цитируемый пост)
Почему просто
HAVING max(strafen.betrag)
не срабатывает?

потому что такая синтаксическая конструкция не корректна

Это сообщение отредактировал(а) Zloxa - 3.11.2011, 09:05


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Killer_13
Дата 4.11.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Пасиб.
Ваш стиль очень понятен.
в этом варианте я почему-то получаю 2 переменных, тоисть должно отобразиться одно поле с максом, а я получаю два, одно с максом, одно другое какое то.. Почему не подскажете?
Код


SELECT name,sum(strafen.betrag)
FROM strafen,spieler
WHERE spieler.spielernr=strafen.spielernr
GROUP BY name
HAVING max(strafen.betrag)= (select max(strafen.betrag) from strafen)



И еще вопрос, может кто знает где искать или у кого может есть *.chm или *.html справка по всем функциям насколько я читал последнего стандарта SQL 2003. А то я нахожу только мануалы к конкретным базам, мне сейчас не нужно не хочется изучать какую то базу, просто подучить чуток как запросы делаются и функции которые есть у всех базах. 


Это сообщение отредактировал(а) Killer_13 - 4.11.2011, 14:41
PM MAIL   Вверх
Zloxa
Дата 4.11.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Killer_13 @  4.11.2011,  14:16 Найти цитируемый пост)
 должно отобразиться одно поле с максом, а я получаю два, одно с максом, одно другое какое то.. Почему не подскажете?

А вы добавьте в список выводимых значений, еще и значение этого максимумума. Думаю, ответ станет и вам очевиден.  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Killer_13
Дата 4.11.2011, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Думаю не станет, думал, думал и не надумал. Если можете - на пальцах объясните. Пасиб.
PM MAIL   Вверх
Zloxa
Дата 4.11.2011, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Killer_13 @  4.11.2011,  18:31 Найти цитируемый пост)
Думаю не станет

Тогда и объяснения бесполезны. Объяснить нечто очевидное всегда сложнее чем просто пальцем показать.

Цитата(Killer_13 @  4.11.2011,  18:31 Найти цитируемый пост)
, думал, думал и не надумал

А я вам не подумать предлагал а посмотреть.

Сделайте так, чтобы запрос возвращал еще и значение максимума, тогда станет видно, что обе строки отобраны потому, что обе содержат одинаковое значение максимума. 

Это сообщение отредактировал(а) Zloxa - 4.11.2011, 19:22


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Killer_13
Дата 4.11.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Zloxa @  4.11.2011,  19:11 Найти цитируемый пост)
Сделайте так, чтобы запрос возвращал еще и значение максимума, тогда станет видно, что обе строки отобраны потому, что обе содержат одинаковое значение максимума. 

Стараюсь вникнуть в ваши слова. Нет, не одинаковые значения. Исходя из данного запроса у меня выведется 2 столбика в первом имя, во втором максимальное значение.

Постановка задачи такова.

Есть 2 таблички spieler и strafen 
Код
spieler
--------
spielernr PK
name


Код
strafen
--------
id
spielernr FK
betrag


вот как выгл табличка strafen

Код
spielernr   betrag
44            20
25            30
5             40
10            60
10            100
5             10
25            50
25            30


Нужно вывести имя у кого наибольшая сума sum(strafen.betrag)
В данном случае это имя номера 10

Это сообщение отредактировал(а) Killer_13 - 4.11.2011, 19:42
PM MAIL   Вверх
Zloxa
Дата 4.11.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Killer_13 @  4.11.2011,  19:41 Найти цитируемый пост)
Нужно вывести имя у кого наибольшая сума sum(strafen.betrag)

Это же уже совсем другая задача.

Код

SELECT name,sum(strafen.betrag)
FROM strafen,spieler
WHERE spieler.spielernr=strafen.spielernr
GROUP BY name
HAVING sum(strafen.betrag) = (select max(sum_betrag) from (select sum(strafen.betrag) sum_betrag from strafen group by spielernr ) s)


А позвольте поинтересоваться,  а чем вас не устроено решение, предложенное Данкингом?

Это сообщение отредактировал(а) Zloxa - 4.11.2011, 20:01


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Killer_13
Дата 4.11.2011, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Zloxa @  4.11.2011,  19:58 Найти цитируемый пост)
А позвольте поинтересоваться,  а чем вас не устроено решение, предложенное Данкингом?


Честно признаться - не помню. Может потому что не слышал такого от препода. smile

Тем не менее , я оч много разобрался, и ваш стиль запроса я для себя запомнил. smile
И есть уже 2 варианта решения. smile
Вот так как он говорил.
Код

SELECT TOP 1 spieler.name,sum(strafen.betrag)
FROM strafen, spieler
WHERE spieler.spielernr=strafen.spielernr 
GROUP BY spieler.name
ORDER BY sum(strafen.betrag) DESC

PM MAIL   Вверх
Данкинг
Дата 4.11.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Цитата(Killer_13 @  4.11.2011,  21:39 Найти цитируемый пост)
Честно признаться - не помню. Может потому что не слышал такого от препода. 

Не помнишь чего?  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Killer_13
Дата 4.11.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Люди говорили что на SyBase TOP не работает, оказывается - работает.

Добавлено через 3 минуты и 2 секунды
Цитата(Данкинг @  4.11.2011,  20:41 Найти цитируемый пост)
Не помнишь чего?  smile  


 smile  - не помню чем не устроило, я уже тут целый день напролом с sql рублюсь - вижу свет в конце туннеля. smile

Пасиб. smile
PM MAIL   Вверх
Zloxa
Дата 4.11.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Killer_13 @  4.11.2011,  20:39 Найти цитируемый пост)
2 варианта решения. 

Надо понимать, что эти запросы не эквивалентны. 
А вот если к top добавить WITH TIES... они станут давать эквивалентный результат, и подзапрос с TOP, на современном этапе развития оптимизаторов, будет производительнее, но он опирается на особенности платформы и не соответствует стандартам sql

Это сообщение отредактировал(а) Zloxa - 4.11.2011, 20:47


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Killer_13
Дата 4.11.2011, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Zloxa @  4.11.2011,  20:46 Найти цитируемый пост)
 и подзапрос с TOP, на современном этапе развития оптимизаторов, будет производительнее, но он опирается на особенности платформы и не соответствует стандартам sql

может потому и не хотел. smile


Цитата(Zloxa @  4.11.2011,  20:46 Найти цитируемый пост)
А вот если к top добавить WITH TIES...

иду читать что это

Цитата(Zloxa @  4.11.2011,  20:46 Найти цитируемый пост)
Надо понимать, что эти запросы не эквивалентны. 

для начинающего сойдет, спасиб за предостережение.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.