我把它分解成多個部分,然後放回到一起。
首先,我得到了平均價格爲每臺的product_id:
SELECT product_id, AVG(price) AS averagePrice
FROM myTable
GROUP BY product_id;
下使一個PRODUCT_ID不能在商店出現不止一次的假設。所以我加入了表一起,這樣我就可以看到什麼店費旁邊的平均價格爲該項:
SELECT m.product_id, m.store_id, m.price, t.averagePrice
FROM myTable m
JOIN(
SELECT product_id, AVG(price) AS averagePrice
FROM myTable
GROUP BY product_id) t ON t.product_id = m.product_id;
有一次,我說,我能夠採取averagePrice和價格之間的差額,按平均價格除以和100這樣的繁殖:
SELECT m.product_id, m.store_id, (100 * ((m.price - t.averagePrice)/t.averagePrice)) AS difference
FROM myTable m
JOIN(
SELECT product_id, AVG(price) AS averagePrice
FROM myTable
GROUP BY product_id) t ON t.product_id = m.product_id;
它在SQL Fiddle爲我工作。
編輯
爲了讓每家店的平均價格差異(對所有項目),我相信你可以走在上面,並通過平均每個單項商店價格差別,你會得到對於存儲的平均價格差異,像這樣:
SELECT store_id, AVG(difference) AS averagePriceDifference
FROM(
SELECT m.product_id, m.store_id, (100 * ((m.price - t.averagePrice)/t.averagePrice)) AS difference
FROM myTable m
JOIN(
SELECT product_id, AVG(price) AS averagePrice
FROM myTable
GROUP BY product_id) t ON t.product_id = m.product_id) t
GROUP BY store_id;
這是Fiddle。
EDIT 2
而且,我將在片返工這和嘗試,並把它重新走到一起。我知道我需要一個子查詢得到的門店數(所以我知道,如果一個產品在每家商店出售),我可以用這個:
SELECT COUNT(distinct store_id) AS storecount
FROM myTable;
現在,我可以把它作爲一個子查詢來獲得在每家商店銷售的產品。我可以按product_id和金額進行分組,因此如果每家商店的商品數量爲1,並且每家商店的商品數量爲2,則每次都會顯示該商品。
SELECT product_id, amount
FROM myTable
GROUP BY product_id, amount
HAVING COUNT(distinct store_id) = (SELECT COUNT(distinct store_id) FROM myTable);
我可以添加到上面來獲得每個項目的平均價格爲金額:
SELECT product_id, amount, AVG(price) AS averagePriceForAmount
FROM myTable
GROUP BY product_id, amount
HAVING COUNT(distinct store_id) = (SELECT COUNT(distinct store_id) FROM myTable);
一旦我有,我可以使用相同的計算每個店的平均價格差異方法我用了前面,如:
SELECT m.store_id, m.product_id, m.amount, (100 * ((m.price - t.averagePriceForAmount)/t.averagePriceForAmount)) AS differenceForItemAndAmount
FROM myTable m
JOIN(
SELECT product_id, amount, AVG(price) AS averagePriceForAmount
FROM myTable
GROUP BY product_id, amount) t ON t.product_id = m.product_id AND t.amount = m.amount
GROUP BY m.store_id;
This將返回店裏,PRODUCT_ID,該產品的量,和店裏的均價從在t差異這個數量的帽子產品。如果你想對所有項目的商店中的平均差價,試試這個:
SELECT store_id, AVG(differenceForItemAndAmount) AS averageDifferenceForStore
FROM(
SELECT m.store_id, m.product_id, m.amount, (100 * ((m.price - t.averagePriceForAmount)/t.averagePriceForAmount)) AS differenceForItemAndAmount
FROM myTable m
JOIN(
SELECT product_id, amount, AVG(price) AS averagePriceForAmount
FROM myTable
GROUP BY product_id, amount) t ON t.product_id = m.product_id AND t.amount = m.amount
GROUP BY m.store_id) t
GROUP BY store_id;
同樣,這將只包括在每一家商店,有在每家商店的相同數量的折扣銷售的項目。
商店可以有多個產品嗎? – AdamMc331 2014-12-03 22:10:11
@ McAdam331這是極不可能的。我們假設不是! – Strawberry 2014-12-04 01:02:42
@ McAdam331是的,這是可能的。我已經改變了示例表,忘記了這一點。謝謝! – Roy 2014-12-04 08:14:07