문제

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 또한 각각의 수를 보여줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top