假设我的表格格式类似于(但有更多项目和区域):
Item State Price
Apple Georgia 8.00
Apple Alaska 9.00
Apple Texas 3.00
Orange Georgia 5.00
Orange Alaska 3.00
Orange Texas 6.00
(假设每个区域每个水果都有一个价格也是安全的,每个区域都列出了每个水果,所以除以0就不太可能发生。)
我想找到一个地方每个水果的平均价格与其他地方水果平均价格的比率。单独完成每个操作非常简单:
(Q1)
SELECT AVG(Price)
FROM TABLE
WHERE State = 'Georgia'
GROUP BY Item
查找格鲁吉亚每种水果的平均价格,
(Q2)
SELECT AVG(Price)
FROM TABLE
WHERE State <> 'Georgia'
GROUP BY Item
查找除格鲁吉亚以外的每种水果的平均值,但如何将这两种水果放在一起以获得比率?
我尝试过类似的事情:
SELECT Item, Q1/Q2
FROM TABLE
GROUP BY Item
但是我收到一个错误,告诉我我的子查询返回多行。另一种尝试涉及删除我的Q1和Q2中的GROUP BY子句,但后来我得到的是一个表,每个水果在第二列中具有相同的数字。非常感谢您提供的任何帮助。
编辑:我只对一个特定州的每个项目的价格与项目价格相对于其他所有州的价格比率感兴趣。因此,运行查询应该产生如下结果:
Item Price(Georgia)/Price(State-[Georgia])
Apple X
Orange Y
......等等。我所说的是我不需要为每个州找到这个,特别是一个特定的州。
答案 0 :(得分:0)
您可以使用子查询和cross join
:
select s1.state, s2.state, s1.avgprice / s2.avgprice as stateratio
from (select state, avg(price) as avgprice
from table t
group by state
) s1 cross join
(select state, avg(price) as avgprice
from table t
group by state
) s2
答案 1 :(得分:0)
使用自我加入比较一个州的商品价格与所有州的商品的平均价格:
SELECT
p1.Item, p1.State, p1.price / AVG(p2.price)
FROM
prices AS p1
JOIN prices AS p2 ON p1.Item = p2.Item
GROUP BY
p1.Item,
p1.State,
p1.Price
结果:
ITEM STATE P1.PRICE / AVG(P2.PRICE)
Apple Alaska 1.35
Apple Georgia 1.2
Apple Texas 0.45
Orange Alaska 0.642857
Orange Georgia 1.071429
Orange Texas 1.285714
小提琴:http://sqlfiddle.com/#!2/32382a/2/0
请注意,您可以将一个州的商品价格与所有其他州的平均值(而非所有州)进行比较,方法是将AND p1.State <> p2.State
添加到JOIN
。但这似乎在统计上不那么合理。
-
OP编辑:
编辑:我只对每个项目的价格比例感兴趣 一个特定的状态超过项目的价格而不是其他 州。因此,运行查询应该产生如下结果:
然后查询将成为:
SELECT
p1.Item, p1.price / AVG(p2.price)
FROM
prices AS p1
JOIN prices AS p2 ON p1.Item = p2.Item
WHERE
p1.State = 'Georgia'
AND p2.State <> 'Georgia'
GROUP BY
p1.Item,
p1.Price