MySQL позволяет разбивать записи результирующего набора на определенные группы на основании определенного атрибута. Для этой цели используется предложение GROUP BY. Так как каждая группа, созданная таким образом, представляется одной строкой (даже если она содержит несколько записей), эта возможность используется в первую очередь в случае многочисленных агрегатных функций MySQL.
Для того чтобы лучше это понять, рассмотрим следующий пример.
Листинг 9.51.
mysql> SELECT accountCreatedAt FROM accounts GROUP BY accountCreatedAt;
В этом примере все попавшие в таблицу accounts записи были сгруппированы по полю accountCreatedAt. Так как все 11 записей таблицы содержат только 5 кодов штатов, MySQL создает 5 четких групп записей и представляет каждую группу одной строкой результирующего набора.
Случайный выбор
Комбинация ключевого слова LIMIT в сочетании с предложением ORDER BY и функцией RAND() дает возможность создания одного из наиболее популярных запросов из списков рассылки - выборки одной или более записей таблицы случайным образом. Этот процесс включает первую сортировку таблицы случайным образом, а затем выборку из результирующего набора одной записи. Или на жаргоне SQL: SELECT fld1, fld2 FROM tbl ORDER BY RAND() LIMIT 0, 1;
Теперь к записям, составляющим определенные отдельные группы, можно применять агрегатные функции. Например, следующий запрос возвращает суммарное число счетов по каждому штату.
+-----+----------------------+
5 rows in set (0.05 sec)
После каждого имени поля в предложении GROUP BY могут быть добавлены ключевые слова ASC или DESC, позволяющие отсортировать результирующий набор в возрастающем или убывающем порядке соответственно. Следующий пример демонстрирует сортировку среднего остатка по счетам и по штатам в порядке, обратном алфавитному.
Группы, созданные предложением GROUP BY можно еще более ограничить, добавив предложение HAVING, которое служит для той же цели, что и предложение WHERE, о котором речь шла ранее: для создания результирующего набора, соответствующего определенному условию. Рассмотрим примеры.
Использование переменных
MySQL также позволяет сохранять результаты запросов SELECT в переменных, заданных пользователем, для использования в будущих запросах SELECT. Эти переменные хранятся на протяжении одного сеанса соединения, обеспечивая удобный и эффективный способ соединения запросов и использование результатов одного запроса в конструкциях другого.
В чем разница между предложениями where и having
Различие между предложениями WHERE и HAVING заключается в том, что предложение WHERE обрабатывает все записи таблицы, выбирая только те, которые соответствуют указанному условию. Предложение HAVING обрабатывает записи после того, как они были выбраны из таблицы для еще более детальной обработки результирующего набора. Обычно предложение HAVING появляется вместе с предложениями GROUP BY, в то время как предложение WHERE - в операторах SELECT, DELETE и UPDATE.
Присвоение значений переменным осуществляется с помощью оператора " :=". В следующем примере показано присвоение самой ранней даты переменной ©oldest.
Имена переменных чувствительны к регистру и могут содержать алфавитно-цифровые символы, символы подчеркивания "_" и точки ".". Эти переменные не различают типы данных. В переменной могут храниться строки или числа без необходимости предварительного объявления типа явным образом.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Группировка результатов выборки
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Выборка записей | Все о MySQL. Использование подзапросов |