2012-02-22 2 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

where句にはcombinedが存在しないため、他の人が言っているように、動作しません。

SQLで次のように実行順序は次のとおりです。

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

ので、あなたがselectに定義名がwhereでは利用できないが - Group Byが実行された後も、sumのような集約にのみ使用可能です。私はが希望推測しています何

totalcombinedの値は、サブ選択で計算し、現在の店の価格と比較され、実際にこの

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 

のようなものです。

また、あなたのやりたいことが完全にはっきりしていないので、これは必要なものではない可能性があります。

+0

あなたは紳士で学者であり、今日私を多く思っています!ありがとうございました! –

+0

私はORDER BYを以下のように変更したことを明確にします:ORDER BY shop.price-(combined/total)ASC ...基本的には、平均以下の商品を販売しているショップをアイテム化しようとしています。最高の貯蓄。 –

0

combined/totalは、元のデータではなく、結果セットの列を使用します。

これらを参照するには、それらを作成した計算を再現するか、サブクエリを使用してその計算を行い、外側のクエリでフィルタリングして並べ替える必要があります。

0

SUMを使用するには、GROUP BYが必要です。

+0

また、私はそれが彼が現在のエラーメッセージではなく次のエラーメッセージであると思っていますが、これは真実です。 –

+0

これを実行すると、MySQLはエラーを返しません:SELECT shop.price、shop.item、shop.full_item_name、shop.qty、shop.shop_id、 SUM(平均202208.combined_prices + averages_20127.combined_prices)合計で、 SUM(averages_20128 .total_sales + averages_20127TOTAL_SALES)FROM 総量 'は' averages_20128.full_item_name = shop.full_item_name ON averages_20128'がJOIN 'averages_20128.full_item_name = averages_20127.full_item_name ON averages_20127'がtheShops.id =ショップON' theShops' をJOIN JOIN shop'。 shop_id –

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がほぼ最後に発生します。

関連する問題