[英]MySQL find averages based on multiple factors
我有桌子做这样的事情
+--------------------------+--------+------+---------+
| | City | Year | Density |
+--------------------------+--------+------+---------+
| Project 1 | City A | 2008 | 500 |
+--------------------------+--------+------+---------+
| Project 2 | City B | 2012 | 800 |
+--------------------------+--------+------+---------+
| Project 3 | City C | 2012 | 400 |
+--------------------------+--------+------+---------+
| Project 4 | City A | 2008 | 600 |
+--------------------------+--------+------+---------+
| Project 5 | City C | 2013 | 700 |
+--------------------------+--------+------+---------+
| etc (c. 30,000 projects spread across 30 cities) |
+--------------------------+--------+------+---------+
(大约30,000个项目分布在30个城市。)
我可以这样写查询:
SELECT Year, AVG(`Density`) as Density FROM table where City=’A’ GROUP BY Year
对于一个城市来说效果很好。 关于我如何编写一个查询来按年计算每个城市的平均值的问题,有人能为我指明正确的方向吗? 我期望结果表看起来像这样:
+------+--------+--------+--------+-------------+
| | City A | City B | City C | City D, etc |
+------+--------+--------+--------+-------------+
| 2005 | | | | |
+------+--------+--------+--------+-------------+
| 2006 | | | | |
+------+--------+--------+--------+-------------+
| 2008 | | | | |
+------+--------+--------+--------+-------------+
| 2009 | | | | |
+------+--------+--------+--------+-------------+
| 2010 | | | | |
+------+--------+--------+--------+-------------+
| etc | | | | |
+------+--------+--------+--------+-------------+
我试图在where子句(where in (select distinct City))
中的where中)中使用子查询,但是它的行为不符合我的预期。
还是我只需要为30个城市中的每个城市单独划一条线?
我不是MySQL的专家,在概念上看不到我需要做什么。 如果有人可以给我任何指示,我将不胜感激。 谢谢。
您可以按多列分组:
SELECT city, year, AVG(density) AS density
FROM table
GROUP BY city, year
这将为每个城市/年份组合返回单独的一行。 要将城市作为列,您需要对其进行透视。 见MySQL数据透视表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.