MySQL حيث البند والطلب بواسطة AVG () كاستعلام فرعي
سؤال
على الرغم من أنني أستطيع التجميع والطلب على استعلام فرعي مستعار ، لا يمكنني استخدام الاسم المستعار في شرط حيث. هل أحتاج إلى استخدام انضمام بدلاً من ذلك؟
الأعمال:
SELECT entries.*,
(SELECT avg(value)
FROM `ratings`
WHERE ratings.entry_id = entries.id) as avg_rating
FROM `entries`
ORDER BY avg_rating DESC
يفشل ("عمود غير معروف" AVG_RATING "في Where Colte"):
SELECT entries.*,
(SELECT avg(value)
FROM `ratings`
WHERE ratings.entry_id = entries.id) as avg_rating
FROM `entries`
WHERE avg_rating < '4.5000' ORDER BY avg_rating DESC
المحلول
قد تكون قادرًا على القيام بذلك بفقرة وجود بدلاً من مكان
نصائح أخرى
سأقوم بالانضمام و Groupby على سبيل المثال ،
SELECT entries.*, AVG(value)
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id
GROUP BY entries.*
HAVING AVG(value) < '4.5000'
ORDER BY AVG(value)
فقط رمز psuedo ، أوصي أيضًا بحد أعمدة الإدخالات على ما تحتاجه بالضبط.
قد تكون قادرًا على التخلص من الاسم المستعار مثل:
SELECT entries.*, AVG(value) as avg_value
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id
GROUP BY entries.*
HAVING avg_value < '4.5000'
ORDER BY avg_value
لا تنتمي إلى StackOverflow