Mysql
 sql >> база данни >  >> RDS >> Mysql

AVG() – Изчислете средната стойност на колона в MySQL

Когато използвате MySQL, можете да използвате AVG() функция за изчисляване на средната стойност от диапазон от стойности.

Например, можете да използвате тази функция, за да разберете какво е средното население на града за дадена страна или щат. Като се има предвид, че една държава ще има много градове, всеки с различно население, можете да разберете каква е средната стойност между тях. Един град може да има население от 50 000, докато друг има население от 500 000. AVG() функцията ще изчисли средната стойност за вас.

Синтаксис

Синтаксисът на AVG() става така:

AVG([DISTINCT] expr) [over_clause]

Където expr е изразът, за който искате средната стойност.

 over_clause е незадължителна клауза, която работи с функциите на прозореца. Начинът, по който работят функциите на прозореца, е, че за всеки ред от заявка се извършва изчисление, като се използват редове, свързани с този ред. В този случай over_clause указва как да се разделят редовете на заявка на групи за обработка от функцията прозорец. Обърнете внимание, че over_clause може да се използва само ако не използвате DISTINCT ключова дума.

Необработени данни

Първо, ето необработените данни, които ще използваме за примерите на тази страница:

SELECT Name, District, Population
FROM City
WHERE CountryCode = 'AUS';

Резултат:

+---------------+-----------------+------------+
| Name          | District        | Population |
+---------------+-----------------+------------+
| Sydney        | New South Wales |    3276207 |
| Melbourne     | Victoria        |    2865329 |
| Brisbane      | Queensland      |    1291117 |
| Perth         | West Australia  |    1096829 |
| Adelaide      | South Australia |     978100 |
| Canberra      | Capital Region  |     322723 |
| Gold Coast    | Queensland      |     311932 |
| Newcastle     | New South Wales |     270324 |
| Central Coast | New South Wales |     227657 |
| Wollongong    | New South Wales |     219761 |
| Hobart        | Tasmania        |     126118 |
| Geelong       | Victoria        |     125382 |
| Townsville    | Queensland      |     109914 |
| Cairns        | Queensland      |      92273 |
+---------------+-----------------+------------+

Основен пример

Както можете да видите от необработените данни по-горе, някои „области“ имат повече от един град и всеки град има различно население. Можем да използваме AVG() функция за намиране на средното население на градовете във всеки район:

SELECT District, AVG(Population) AS 'Average Population'
FROM City
WHERE CountryCode = 'AUS'
AND District = 'New South Wales';

Резултат:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |        998487.2500 |
+-----------------+--------------------+

Така че можем да видим, че Нов Южен Уелс има средно градско население от 998487,2500.

Закръгляване на средната стойност

Вероятно сте забелязали, че резултатът от предишния пример е доста точен – връща резултат до четири знака след десетичната запетая. В нашия случай това вероятно е малко прекалено. Нямаме нужда от резултат до четвъртия знак след десетичната запетая. Следователно можем да използваме ROUND() функция, за да го закръглите до най-близкото цяло число (или до определен брой десетични знаци, ако желаем).

Ето пример за закръгляне на резултата до най-близкото цяло число:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'
FROM City
WHERE CountryCode = 'AUS'
AND District = 'New South Wales';

Резултат:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |             998487 |
+-----------------+--------------------+

По подразбиране ROUND() функцията закръглява до най-близкото цяло число. Като алтернатива бихме могли да предоставим 2-ри аргумент, за да посочим няколко десетични знака, но в този случай не искаме това.

Клаузата GROUP BY

Можем да използваме GROUP BY клауза за изброяване на всеки район/щат, заедно със средното им градско население:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Резултат:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |             998487 |
| Victoria        |            1495356 |
| Queensland      |             451309 |
| West Australia  |            1096829 |
| South Australia |             978100 |
| Capital Region  |             322723 |
| Tasmania        |             126118 |
+-----------------+--------------------+

Клауза ORDER BY

Можем също да използваме ORDER BY клауза, за да посочите колона, с която да подредите по:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Average Population`;

Резултат:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| Tasmania        |             126118 |
| Capital Region  |             322723 |
| Queensland      |             451309 |
| South Australia |             978100 |
| New South Wales |             998487 |
| West Australia  |            1096829 |
| Victoria        |            1495356 |
+-----------------+--------------------+

Имайте предвид, че когато поръчвате по псевдоним от няколко думи (като `Average Population` ), трябва да използвате символа за обратна отметка (` ) вместо апострофа (' ), за да обградите двете думи.

Намерете средната дължина на знака

AVG() функцията не се ограничава само до колони с числови данни. Можете също да комбинирате AVG() с други функции, за да намерите средни стойности в други области.

Например, използвайки нашите примерни данни, можем да намерим средната дължина на знаците на всички стойности в City колона:

SELECT ROUND(AVG(CHAR_LENGTH(Name))) AS 'Average Character Length'
FROM city
WHERE CountryCode = 'AUS'
AND District = 'New South Wales';

Резултат:

+--------------------------+
| Average Character Length |
+--------------------------+
|                       10 |
+--------------------------+

Използване на клауза OVER

Както споменахме, синтаксисът позволява OVER клауза, която да бъде включена във вашите запитвания. Това може да стане малко сложно, но по принцип OVER Клаузата ви позволява да укажете как да разделяте редовете на заявка на групи за обработка от функцията прозорец.

Ето един пример:

SELECT 
    District,
    Name AS City,
    Population,
    ROUND(AVG(Population) OVER(PARTITION BY District)) AS 'District Avg'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY District;

Резултат:

+-----------------+---------------+------------+--------------+
| District        | City          | Population | District Avg |
+-----------------+---------------+------------+--------------+
| Capital Region  | Canberra      |     322723 |       322723 |
| New South Wales | Sydney        |    3276207 |       998487 |
| New South Wales | Wollongong    |     219761 |       998487 |
| New South Wales | Newcastle     |     270324 |       998487 |
| New South Wales | Central Coast |     227657 |       998487 |
| Queensland      | Townsville    |     109914 |       451309 |
| Queensland      | Brisbane      |    1291117 |       451309 |
| Queensland      | Cairns        |      92273 |       451309 |
| Queensland      | Gold Coast    |     311932 |       451309 |
| South Australia | Adelaide      |     978100 |       978100 |
| Tasmania        | Hobart        |     126118 |       126118 |
| Victoria        | Melbourne     |    2865329 |      1495356 |
| Victoria        | Geelong       |     125382 |      1495356 |
| West Australia  | Perth         |    1096829 |      1096829 |
+-----------------+---------------+------------+--------------+

Този пример разделя редовете по District , предоставяйки средната стойност за всеки дял (район). Това ви позволява да видите по-подробни данни, като населението на града, заедно със средното население за областта, към която принадлежи.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете таблица в MySQL

  2. PHP PDO срещу нормален mysql_connect

  3. Използване на съветници за архивиране на база данни за автоматизиране на задачите за поддръжка

  4. Дублиране на MySQL таблица, индекси и данни

  5. WordPress изготвено изявление с условие IN().