WHERE 절에서 온도 열을 사용하는 방법
-
08-07-2019 - |
문제
Where 절에서 임시 열을 사용할 수없는 이유는 무엇입니까?
예를 들어이 쿼리 :
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
즉석에서 생성되며 해당 브랜드에 50 개 또는 제품이 있는지 여부에 따라 항상 1 또는 0입니다.
이 모든 것이 나에게 의미가 있습니다. 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
그건 a count > 50
또한 각각의 수를 보여줄 것입니다.
제휴하지 않습니다 StackOverflow