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 

、私はのはcolumn yこれを呼ぶことにしましょう、私の外側のクエリで1つの余分WHERE句を追加します。

は、私は、行のみのカウントを取得するために、私は私のサブクエリを繰り返すワンません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の機能ですか?あなたの以前の質問は「ハイブ」のためのものでした。物事にタグを付ける方法がわからない。 – Drew

+0

私は実際に行っていますが、ハイブの質問のほとんどは未回答で、ハイブはSQLだけに似ていますので、SQLでタグ付けしました。しかし、ええ、私はそれを得るには、注釈で少なくともそう言及していたはずです。 @Drew –

+0

あなたのプラットフォームはハープとハイブですか?オラクル、知っている。彼らが未回答の理由は誰もがfoobarものを使用していないcuzです。あなたの以前の質問のように、人々は混乱しました。そして、私はあなたのシステム上で動作しないmysqlクロス結合をあなたに与えようとしていました。あなたはあなたの時間などを浪費しています。タグは正しい方法でタグ付けします。 – Drew

答えて

1

あなたは、その一時テーブルのSELECT INTOクエリにサブクエリを変更し、一時テーブルにデータを入れて、メインクエリでそれを使用し、個別にちょうどSELECT COUNT(*)でした。それはかなりあなたの要件を満たす必要があります。

+1

一時テーブルを使用するのは、通常、すべての作業に対して最悪のアプローチです – Drew

関連する問題