2015-01-29 3 views
2

Учитывая эту таблицу:MYSQL запрос с использованием ключевого слова ALL

account_number branch_name balance 
A-101   Downtown  500 
A-102   Perryridge  400 
A-201   Brighton  900 
A-215   Mianus   700 
A-217   Brighton  750 
A-222   Redwood   700 
A-305   Round Hill  350 

я должен найти, чтобы написать запрос MySQL, чтобы найти ветку (branch_name) с наибольшим средним балансом. Я пытаюсь понять, как используется ключевое слово ALL.

Я попытался следующие:

SELECT branch_name,avg(balance) 
FROM account GROUP BY branch_name 
WHERE avg(balance) >= ALL (
SELECT avg(balance) 
FROM account GROUP BY branch_name 
); 

Я получаю синтаксическую ошибку рядом "ГДЕ сред (баланс)> = ALL", хотя. Помогите?

ответ

1

У вас есть синтаксическая ошибка, потому что where идет доgroup by, а не после.

Чтобы быть честным, я в принципе никогда не использую ключевые слова all, some или any. Я не считаю, что они необходимы. Если вы хотите, ветвь с самым высоким балансом, вы можете просто сделать:

SELECT branch_name, avg(balance) 
FROM account 
GROUP BY branch_name 
ORDER BY avg(balance) DESC 
LIMIT 1; 

Там может быть интересное упражнение в том, как вы могли бы сделать это с помощью подзапросов. Но более важно изучить прямой подход.

+0

Обратите внимание, что это работает до тех пор, пока нет другой ветки, разделяющей самый высокий средний баланс, [я никогда не использую НЕКОТОРЫЕ, ВСЕ, ЛЮБЫЕ либо - но больше из незнания, чем выбор!] – Strawberry

+0

@Strawberry. , , Только для записи вы можете заменить ключевые слова на агрегацию в подзапросе, поэтому 'x> any()' совпадает с 'x> (выберите max() ...)'. Я считаю, что последнему легче следовать. –

+0

Ahhh - так вот ... SELECT имя_индустрии, AVG (баланс) FROM account GROUP BY имя_панели HAVING AVG (баланс)> = ALL (SELECT AVG (баланс) FROM account GROUP BY branch_name); – Strawberry

0

Я забираю его обратно. ALL - ровно что нужно здесь !!!

SELECT branch_name 
    , AVG(balance) 
    FROM account 
GROUP 
    BY branch_name 
HAVING AVG(balance) >= ALL(SELECT AVG(balance) 
          FROM account 
          GROUP 
           BY branch_name); 

Это позволяет использовать галстуки!

Смежные вопросы