私は次のような厄介なMySQLクエリを持っています:
SELECT camera_id, ((avg(low_price) + avg(high_price)) / 2) as avg_price
FROM camera_general, camera_products
WHERE camera_id = ir_camera_id
AND dp_post_dt IS NOT NULL
AND dp_post_dt NOT LIKE '0000%'
AND currently_manufactured = 'Yes'
AND ((no_of_sellers >= 0) OR ((TO_DAYS(CURRENT_DATE) - TO_DAYS(dp_post_dt)) < 120))
AND avg_price < 150
AND camera_id != 1411
AND camera_id != 9
ORDER BY rand();
これにより、「where句'の不明な列'avg_price'」エラーが発生しました。これは、WHERE句で列エイリアスが許可されていないためだと理解しています。(私が行くときにこれのいずれかが間違っている場合は私を訂正してください。)
だから、私は次のようにクエリを微調整しました:
SELECT camera_id, ((avg(low_price) + avg(high_price)) / 2) as avg_price
FROM camera_general, camera_products
WHERE camera_id = ir_camera_id
AND dp_post_dt IS NOT NULL
AND dp_post_dt NOT LIKE '0000%'
AND currently_manufactured = 'Yes'
AND ((no_of_sellers >= 0) OR ((TO_DAYS(CURRENT_DATE) - TO_DAYS(dp_post_dt)) < 120))
AND ((avg(low_price) + avg(high_price)) / 2) < 150
AND camera_id != 1411
AND camera_id != 9
ORDER BY rand();
エイリアスを実際の計算に置き換えると、このクエリで「グループ関数の使用が無効です」というエラーが発生しました。これは、WHERE句が処理を完了するまでavg()が発生しないためだと理解しています。
だから私は試しました:
SELECT camera_id, ((avg(low_price) + avg(high_price)) / 2) as avg_price
FROM camera_general, camera_products
ORDER BY rand();
HAVING camera_id = ir_camera_id
AND dp_post_dt IS NOT NULL
AND dp_post_dt NOT LIKE '0000%'
AND currently_manufactured = 'Yes'
AND ((no_of_sellers >= 0) OR ((TO_DAYS(CURRENT_DATE) - TO_DAYS(dp_post_dt)) < 120))
AND avg_price < 150
AND camera_id != 1411
AND camera_id != 9;
WHEREをHAVINGに置き換えると、このエラーが発生しました。「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、「HAVING camera_id=ir_camera_id」の近くで使用する正しい構文を確認してください。」
そしてこの時点で、私はこのクエリを機能させるために暗闇の中で撮影しているように感じます。誰かがこれを機能するクエリにするために正しい方向に私を導きますか?
ありがとう!