شرح صفوف ومحتوى الفقرة
بما أن الأسماء المستعارة للأعمدة AS alias_name تُعرَّف في مرحلة SELECT (المرحلة الخامسة في التنفيذ المنطقي)، فإن صلاحية استخدامها في بقية جمل الاستعلام تخضع لقواعد واضحة:
- ممنوعة قطعياً في
WHERE(المرحلة 2): عند تنفيذWHEREلم تكن مرحلةSELECTقد بدأت بعد، لذا فإن استخدام الاسم المستعار داخلWHEREيُطلق دائماً الخطأError 1054: Unknown column. - مدعومة قياسياً في
ORDER BY(المرحلة 7): تعمل الأسماء المستعارة فيORDER BYفي جميع قواعد البيانات لأن الفرز يتم بعد اكتمالSELECT. - امتداد MySQL في
GROUP BYوHAVING: يدعم محرك MySQL كامتداد مريح التعرّف على الأسماء المستعارة داخلGROUP BYوHAVINGأيضاً.
معرفة هذه القاعدة تختصر وقت تشخيص أخطاء الأعمدة غير المعروفة في الاستعلامات التحليلية.
SQL
-- WHERE uses raw expression; GROUP BY, HAVING & ORDER BY use alias
SELECT (unit_price - discount_usd) AS net_price,
COUNT(*) AS item_count
FROM products
WHERE (unit_price - discount_usd) > 0
GROUP BY net_price
HAVING item_count >= 2
ORDER BY net_price DESC;