2012-02-22 2 views
2
SELECT shop.price,shop.item,shop.full_item_name,shop.qty,shop.shop_id, 
SUM(averages_20128.combined_prices + averages_20127.combined_prices) AS combined, 
SUM(averages_20128.total_sales + averages_20127.total_sales) AS total 
FROM `shop` 
JOIN `averages_20128` 
ON averages_20128.full_item_name=shop.full_item_name 
JOIN `averages_20127` 
ON averages_20128.full_item_name=averages_20127.full_item_name 
JOIN `theShops` 
ON theShops.id=shop.shop_id 
WHERE shop.price<combined/total 
AND theShops.open='1' 
AND shop.id!='' 
AND `total`>10 
ORDER BY combined/total DESC 
LIMIT 100 

오류 : 알 수없는 열이의 '결합' 'where 절'결합 SUM과 WHERE - 내가 기대하는 결과를 얻지 못하고

개요 : 나는 현재 평균을 저장하는 열을 생성하고 있음에 주문 생각했다 , 그러나 내가 처음 시작했을 때 나는 그것을하지 않았고 지금은 산이있다. 차라리 모든 것을 거치지 않고 이것을 다시 계산하지 않을 것입니다. 그래서 MySQL이 나를 위해 수학을 할 수 있기를 바랍니다.

WHERE/ORDER 절을 생략하면 구문에 이상이 있음을 알게 해줍니다.

답변

0

where 절에 combined을 사용할 수 없기 때문에 다른 사람이 말한 것처럼 작동하지 않습니다. 또한, sumGroup By이 실행 된 후에 만 ​​사용할 수 있습니다처럼 집계 -

FROM clause 
WHERE clause 
GROUP BY clause 
HAVING clause 
SELECT clause 
ORDER BY clause 

그래서 당신이 select에 정의 이름을 where에서 사용할 수 없습니다 :

실행의 순서는 SQL에서 다음과 같습니다.

내가 당신이 원하는 실제로 totalcombined의 값으로 계산이

SELECT shop.price,shop.item,shop.full_item_name,shop.qty,shop.shop_id, 
combined, total 
FROM `shop` 
JOIN (
    SELECT averages_20128.full_item_name, 
    SUM(averages_20128.combined_prices + averages_20127.combined_prices) AS combined, 
     SUM(averages_20128.total_sales + averages_20127.total_sales) AS total 
    FROM `averages_20127` JOIN averages_20128 
     ON averages_20128.full_item_name=averages_20127.full_item_name 
    GROUP BY averages_20128.full_item_name 
) AS averages 
ON averages.full_item_name=shop.full_item_name 
JOIN `theShops` 
ON theShops.id=shop.shop_id 
WHERE shop.price<combined/total 
AND theShops.open='1' 
AND shop.id!='' 
AND `total`>10 
ORDER BY combined/total DESC 
LIMIT 100 

같은 추측하고있는 무슨 하위 선택 현재 매장 가격 비교 후합니다.

다시 말하지만, 사용자가 원하는 것을 분명히 밝히지 않았으므로 필요한 내용이 아닐 수 있습니다.

+0

당신은 신사이고 학자이며 오늘 많이 생각했습니다! 고맙습니다! –

+0

나는 ORDER BY를 다음과 같이 변경했다는 것을 분명히하겠다. shop.price- (combined/total) ASC ... ORDER BY ORDER BY (합계/합계) ASC ... 그래서 기본적으로 그것은 평균보다 낮은 가격으로 상품을 판매하는 상점을 아이템으로 만들려고 노력하고있다. 가장 큰 비용 절감. –

0

combined/total은 원본 데이터가 아닌 결과 집합의 열을 사용합니다.

이와 같이이를 만들려면 계산을 재현하거나 하위 쿼리를 사용하여 계산을 수행 한 다음 외부 쿼리에서 필터링하고 정렬해야합니다.

0

SUM을 사용하려면 GROUP BY이 있어야합니다.

+0

나는 그것이 그가 현재보다는 오히려 가지고있는 다음 오류 메시지 일 것이라고 생각한다. –

+0

이것을 실행하면 MySQL은 오류를 반환하지 않습니다. SELECT shop.price, shop.item, shop.full_item_name, shop.qty, shop.shop_id, SUM (평균 202188.combined_prices + averages_20127.combined_prices) 합쳐서, SUM (평균 202128 .total_sales + averages_20127.TOTAL_SALES) FROM 총량은'' averages_20128.full_item_name = shop.full_item_name ON averages_20128' 조인'averages_20128.full_item_name = averages_20127.full_item_name ON averages_20127' 가 theShops.id = 숍 ON 'theShops' 를 조인 shop'. shop_id –

1

변경 :

WHERE shop.price < combined/total 

사람 :

WHERE shop.price < 
    SUM(averages_20128.combined_prices + averages_20127.combined_prices)/total 

아니면 HAVING 절로 이동 : 총 열을 사용할 수없는, 그래서

HAVING shop.price < combined/total 

WHERESUM() 전에 적용 아직까지. HAVING가 거의 마지막으로 발생합니다.

관련 문제