|
Программирование >> Программный интерфейс приложений
Аналогичный запрос покажет, сколько президентов родилось в каждом штате. mysql> SELECT state, COUNT(*) FROM president GROUP BY state;
При таком подсчете нам поможет предложение group by; оно сооб-шает базе данных, каким образом группировать значения. Его отсутствие будет расценено СУБД MySQL как ошибка. Использование couNT(*) в совокупности с group by для подсчета значений имеет ряд преимушеств при подсчете количества вхождений определенных значений столбцов. Нет необходимости знать все значения, имеющиеся в столбце, значения которого подсчитываются. Нет необходимости в серии последовательных запросов, достаточно одного. ш Так как результат получен одним запросом, он вполне поддается сортировке. Первые два преимущества позволяют создавать запросы более простым способом. Третье преимущество также важно, так как оно позволяет гибко манипулировать полученными результатами. При задании предложения group by результаты фуппируются по группируемому столбцу. Но это совсем не исключает применения фуппировки с помощью order by в другом порядке. Например, нужно подсчитать количество президентов по штату рождения, но отсортировать их по убыванию, начиная со штата, в котором родилось больще всего президентов США. niysql> SELECT state, COUNTS*) AS count FRCM president ->GROUP BY state ORDER BY count DESC; Глава 1. Знакомство с СУБД MySQL и SQL 4-1729
Столбцу, который нужно отсортировать, но который является результатом вычислений, можно присвоить псевдонимы и в предложении order by ссылаться прямо на него. Это продемонстрировано в последнем запросе. Столбцу count{*) присвоен псевдоним count. Можно ссылаться на такой столбец и по-другому: указав порядок его следования в выводимых данных. Перепишем этот запрос след>юшим образом. SELECT state, COONT(*) FROM president GROUP BY state ORDER BY 2 DESC Я не на.хожу читабельной ссылку на столбец по его позиции. К примеру, при добавлении, удалении или изменении порядка следования столбцов в этом случае нужно помнить о необходимости проверки предложения order by и изменить номер столбца, если он менялся. Псевдонимы не приводят к таким проблемам. Это справедливо для предложения group by. При использовании предложения group by с вычисляемым столбцом ссылка на него может производиться как по его позиции в списке столбцов, так и по его псевдониму. Вот запрос, который определяет, сколько президентов США родилось в каждом месяце. mysql> SELECT MONTH(birth) as Month, MONTHNAME(birth) as Name, ->COUNT(*) AS count ->FROM president GROUP BY Name ORDER BY Month;
С указанием позиций столбцов запрос будет иметь следующий вид. SELECT MONTH(birth), MONTHNAME(birth), COUNT(*) FROM president GROUP BY 2 ORDER BY 1; Функцию count о можно указать в комбинации с order by и limit для того, чтобы, например, найти четыре наиболее щироко представленных щтата из таблицы president. mysql> SELECT state, COUNT(*) AS count FROM president ->GROUP BY state ORDER BY count DESC LIMIT 4; I state I COUNT(*) +-+- Можно поставить ограничение и без применения предложения limit, анализируя только значение, выдаваемое счетчиком count(*). Вот запрос, который выберет щтаты, в которых родилось два и более президента США. mysql> SELECT state, COUNT (*) AS co\mt FROM president ->GROUP BY state HAVING COUNT > 1 ORDER BY count DESC; +-+-+ I state I COUNT(*)
Более общий случай применения этого типа запросов - поиск повторений. Предложение having подобно предложению where, но первое применяется, в отличие от второго, тогда, когда результаты запроса уже выбраны, для того, чтобы сузить область результатов, посылаемых сервером клиенту.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |