簡體   English   中英

如何編寫 SQL 查詢平均值?

[英]How do I write SQL query for average?

最近參加了SQL的面試,問題如下:

編寫查詢以檢索城市名稱、state 名稱、城市人口並返回以下計算結果以及上述字段。

  1. 平均城市人口在state。
  2. state 的城市人口與平均城市人口之間的差異。

城市表:

城市名稱 State_NAme 人口
巴爾的摩 馬里蘭州 30000
大學公園 馬里蘭州 18000
哥倫比亞 馬里蘭州 20000
波士頓 馬薩諸塞州 35000
馬爾登 馬薩諸塞州 10000
多佛 特拉華州 20000
Jersey 城市 新Jersey 35000

我試過下面的查詢,但沒有得到所需的 output。任何人都可以幫助我進行正確的查詢嗎?

select * from city_table;

select state_name, sum(population)/count(city_name) as average_city_pop
from city_table
group by state_name;

您需要進一步探索 sql,了解聚合函數和連接。 您的查詢在獲取平均人口方面是正確的。 您需要將它加入到原始表中以獲得結果。

with avg_city_pop as (select state_name, avg(population) as avg from city group by state_name)
select c.*, acp.avg as average_city_population, abs(acp.avg-c.population) as difference  from city c inner join avg_city_pop acp on c.state_name = acp.state_name;

在這里試試

對於8.0之前的MySQL版本,我們可以使用相關子查詢得到每個state的平均人口,也可以用來計算城市人口與state平均人口的差距。 請注意,可選地使用abs function 始終返回正數。 如有必要,請省略它。

select city_name,state_name,(select avg(population) from city where state_name=c.state_name group by state_name ) as average_pop ,
abs(population - (select avg(population) from city where state_name=c.state_name group by state_name )) as gap_pop 
from city c;
select 
   city_name,
   state_name,
   population,
   avg(population) over (partition by state_name) as Avg_pop,
   population-avg(population) over (partition by state_name) as Difference
from city;

參見 sqlfilldle: https://www.db-fiddle.com/f/tVxdH6bQvsu48umWgLmrQB/0

這需要 MySQL 8.0+,因為over_clause從 8.0 開始可用。

output:

城市名稱 州名 人口 平均流行 區別
多佛 特拉華州 20000 20000.0000 0.0000
巴爾的摩 馬里蘭州 30000 22666.6667 7333.3333
大學公園 馬里蘭州 18000 22666.6667 -4666.6667
哥倫比亞 馬里蘭州 20000 22666.6667 -2666.6667
波士頓 馬薩諸塞州 35000 22500.0000 12500.0000
模具 馬薩諸塞州 10000 22500.0000 -12500.0000
jersey 城市 新 jersey 35000 35000.0000 0.0000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM