2012-02-22 98 views
2
SELECT shop.price,shop.item,shop.full_item_name,shop.qty,shop.shop_id, 
SUM(averages_20128.combined_prices + averages_20127.combined_prices) AS combined, 
SUM(averages_20128.total_sales + averages_20127.total_sales) AS total 
FROM `shop` 
JOIN `averages_20128` 
ON averages_20128.full_item_name=shop.full_item_name 
JOIN `averages_20127` 
ON averages_20128.full_item_name=averages_20127.full_item_name 
JOIN `theShops` 
ON theShops.id=shop.shop_id 
WHERE shop.price<combined/total 
AND theShops.open='1' 
AND shop.id!='' 
AND `total`>10 
ORDER BY combined/total DESC 
LIMIT 100 

錯誤:在未知列'合併「where子句」結合SUM和WHERE - 沒有得到我期望的結果

概述:我已經考慮創建存儲當前平均列和排序上但是,我剛開始時並沒有這樣做,現在已經有了數據。我寧願不經過這一切並重新計算這一點。所以我希望MySQL能爲我做數學。

當我遺漏了WHERE/ORDER子句時,這會起作用,導致我相信我的語法有問題。

回答

0

正如其他人所說,它不起作用,因爲combinedwhere子句中不可用。

執行的順序是在SQL如下:

FROM clause 
WHERE clause 
GROUP BY clause 
HAVING clause 
SELECT clause 
ORDER BY clause 

讓你在select定義名稱中不提供where - 也喜歡聚集僅提供Group By執行後sum

我什麼猜測你想要實際上是這樣的

SELECT shop.price,shop.item,shop.full_item_name,shop.qty,shop.shop_id, 
combined, total 
FROM `shop` 
JOIN (
    SELECT averages_20128.full_item_name, 
    SUM(averages_20128.combined_prices + averages_20127.combined_prices) AS combined, 
     SUM(averages_20128.total_sales + averages_20127.total_sales) AS total 
    FROM `averages_20127` JOIN averages_20128 
     ON averages_20128.full_item_name=averages_20127.full_item_name 
    GROUP BY averages_20128.full_item_name 
) AS averages 
ON averages.full_item_name=shop.full_item_name 
JOIN `theShops` 
ON theShops.id=shop.shop_id 
WHERE shop.price<combined/total 
AND theShops.open='1' 
AND shop.id!='' 
AND `total`>10 
ORDER BY combined/total DESC 
LIMIT 100 

totalcombined值計算的分選,然後與當前店鋪的價格進行比較。

再次,它不完全清楚你想要做什麼,所以這可能不是你所需要的。

+0

你先生,是個紳士和學者,今天想到了我很多!謝謝! – 2012-02-22 19:44:43

+0

我將闡明我將ORDER BY更改爲:ORDER BY shop.price-(combined/total)ASC ...因此,基本上它試圖將商品銷售低於平均水平的商店,然後再訂購最高的節省。 – 2012-02-22 20:07:23

0

combined/total使用來自結果集的列而不是原始數據。

爲了像這樣引用它們,您需要重新創建它們的計算,或使用子查詢來執行該計算,然後在外部查詢中進行篩選和排序。

0

要使用SUM您需要有一個GROUP BY的地方。

+0

也是如此,雖然我認爲這將是他得到的下一個錯誤信息,而不是現在的。 – 2012-02-22 18:33:12

+0

如果我運行這個,MySQL不會返回任何錯誤:SELECT shop.price,shop.item,shop.full_item_name,shop.qty,shop.shop_id, SUM(averages_20128.combined_prices + averages_20127.combined_prices)AS合併, SUM(averages_20128 .total_sales + averages_20127。TOTAL_SALES)從總 'shop' JOIN'averages_20128' ON averages_20128.full_item_name = shop.full_item_name JOIN'averages_20127' ON averages_20128.full_item_name = averages_20127.full_item_name JOIN'theShops' ON theShops.id =店。 shop_id – 2012-02-22 18:45:20

1

變化:

WHERE shop.price < combined/total 

要:

WHERE shop.price < 
    SUM(averages_20128.combined_prices + averages_20127.combined_prices)/total 

或將其移動到HAVING條款:

HAVING shop.price < combined/total 

WHERESUM()之前應用,因此總列不可到它呢。 HAVING幾乎發生在最後。

相關問題