2016-06-17 5 views
0

을 반환합니다. 그룹별로 사용할 필요없이 행 수를 얻지 못하는 것이 정말 귀찮습니다. 내 하위 쿼리가 반환 한 "총 개수"를 가져와야합니다.하위 쿼리에서 반환 된 열 수와 함께 하위 쿼리

select sales_flat_order.increment_id, sales_flat_order.created_at, sales_flat_order.status, dispatch.dispatch_date, 
DATEDIFF(TO_DATE(dispatch.dispatch_date), TO_DATE(sales_flat_order.created_at)) as delay 
FROM 
magentodb.sales_flat_order 
LEFT OUTER JOIN erpdb.dispatch 
ON 
sales_flat_order.increment_id == dispatch.order_num 
where 
TO_DATE(created_at) >= DATE_SUB(current_date(),6) 
AND 
TO_DATE(created_at) <= DATE_SUB(current_date(), 3) 
AND 
sales_flat_order.status NOT IN ('canceled', 'exchange', 'rto', 'pending_auth', 'pending_payment' ,'partial_refund','refund', 'refund_cash', 'partial_refund_cash', 'holded') 
) 
AS TempFiltered 

지금, 내 외부 쿼리에 1 개의 여분 WHERE 절을 추가은 행의 "작은"수를 반환되도록의이 column y을 부르 자 : 여기

처럼 내 하위 쿼리는 모습입니다.

내가 만 행의 수를 얻기 위해 내 하위 쿼리를 반복 완하지 않는 X와 Y의 비율 (하위 쿼리에 외부 쿼리에 의해 반환 된 행의 즉 수)

를 취할 필요합니다. 내가받을 수 있니?

이것은 내가 지금까지 가지고있는 것입니다. 그러나 당연히 잘못된 것입니다. 선택 열을 제외하거나 그룹별로 사용하지 않고도 모든 행을 셀 수는 없습니다. 내가 해결할 수 있니?

SELECT tempfiltered.delay, count(*) as countOfOrders,(100*count(*))/tempfiltered.Total) over() as percentage 
FROM 
(
select count(*) as Total, sales_flat_order.increment_id, sales_flat_order.created_at, sales_flat_order.status, dispatch.dispatch_date, 
DATEDIFF(TO_DATE(dispatch.dispatch_date), TO_DATE(sales_flat_order.created_at)) as delay 
FROM 
magentodb.sales_flat_order 
LEFT OUTER JOIN erpdb.dispatch 
ON 
sales_flat_order.increment_id == dispatch.order_num 
where 
TO_DATE(created_at) >= DATE_SUB(current_date(),6) 
AND 
TO_DATE(created_at) <= DATE_SUB(current_date(), 3) 
AND 
sales_flat_order.status NOT IN ('canceled', 'exchange', 'rto', 'pending_auth', 'pending_payment' ,'partial_refund','refund', 'refund_cash', 'partial_refund_cash', 'holded') 
) 
AS TempFiltered 
Where 
DATEDIFF(TO_DATE(TempFiltered.dispatch_date), TO_DATE(TempFiltered.created_at)) > 1  
GROUP BY tempfiltered.delay 
ORDER BY tempfiltered.delay 
+0

이 TO_DATE는 oracle 함수입니다. 이전 질문은 '하이브 (hive)'에 대한 질문이었습니다. 나는 당신이 사물에 태그하는 방법을 알지 못합니다. – Drew

+0

사실 나는 하이브 질문의 대부분이 답이없고 하이브가 SQL과 더 비슷하기 때문에 SQL에서 태그를 붙였습니다. 하지만 그래, 알았어. 메모에 적어도 언급 했어야 했어. @Drew –

+0

당신의 플랫폼은 하프 앤 하이브입니까? 오라클. 그들이 대답하지 않은 이유는 아무도 foobar 것을 사용하지 않는 사촌입니다. 그리고 이전의 질문처럼 사람들은 혼란 스러웠습니다. 그리고 저는 여러분의 시스템에서 작동하지 않는 mysql 크로스 조인을하려고했습니다. 당신은 당신의 시간과 다른 사람들을 낭비하고 있습니다. 태그는 올바른 방법으로 처리합니다. – Drew

답변

1

는 별도로 그 임시 테이블의 단지 SELECT COUNT (*)를 쿼리로 SELECT에 하위 쿼리를 변경하고 임시 테이블에 데이터를 넣고, 메인 쿼리에 그것을 사용하고 있습니다. 그건 꽤 많이 귀하의 요구 사항을 만족해야합니다.

+1

임시 테이블을 포함 시키려면 일반적으로 모든 작업에 최악의 접근 방식을 사용합니다. – Drew

관련 문제