كيفية استخدام عمود درجة الحرارة في جملة WHERE
-
08-07-2019 - |
سؤال
لماذا لا يمكنني استخدام عمود مؤقت في بند أين؟
وعلى سبيل المثال، هذا الاستعلام:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM
products
WHERE
1
GROUP BY
product_brand
وهذا إحضار عمودين، واحدة تسمى product_brand
واحدة تسمى brand_count
. يتم إنشاء brand_count
على الطاير ودائما 1 أو 0 اعتمادا على وجود أو عدم وجود 50 أو المنتجات مع أن العلامة التجارية.
وكل هذا يجعل من المنطقي بالنسبة لي، إلا أنني لا يمكن تحديد إلا إذا brand_count = 1
كما هو الحال في هذا الاستعلام أدناه:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM
products
WHERE
brand_count = 1
GROUP BY
product_brand
والذي يعطيني هذا الخطأ:
#1054 - Unknown column 'brand_count' in 'where clause'
المحلول
استخدم HAVING
بدلا من ذلك:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM products
GROUP BY product_brand
HAVING brand_count = 1
ويتم تقييم WHERE
<م> قبل م> وGROUP BY
. يتم تقييم HAVING
بعد.
نصائح أخرى
ولأن في SQL الأعمدة هي الأولى "المختارة" ثم "المتوقعة".
لديك لاستخدام جملة كاملة، لذلك سوف تحتاج:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM products
WHERE
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) = 1
GROUP BY product_brand
وهذا هو نفسه لأي حقل محسوب في أي بيان SQL.
لتبسيط:
Select Max(Points) as Highest where Highest > 10
ولن تنجح، ولكن:
Select Max(Points) as Highest where Max(Points) > 10
والإرادة. انه نفس الشيء في قضيتك.
لأنه لا يوجد لديه فكرة ما هذا العمود هو حتى بعد انها فعلت المعالجة.
إذا كنت تريد الوصول إلى عمود بهذا الاسم قد تضطر إلى استخدام فرعي، وإلا فإنك ستكون لدينا لتأهيل العمود دون الاسم الذي أعطاه، وتكرار بيان قضيتك.
إذا قرأت نيتك بشكل صحيح، يمكنك إعادة كتابة هذا الاستعلام على النحو التالي:
Select
product_brand,
COUNT(product_brand) AS brand_count
FROM
products
GROUP BY
product_brand
HAVING
COUNT(product_brand) > 50
وهذا سوف أعطيك كل product_brands
التي لديها count > 50
وسوف تظهر لك أيضا
العد لكل منها.