1

1 つを除くすべての行に対して合計操作を実行するクエリを探しています。以下の例でより明確になります。

このような会社のテーブルがあるとします

Company_name     Rev      order
  c1             100      1000
  c2             200      2000
  c3             300      1500

クエリは、以下で説明する方法のようにテーブルに挿入する必要があります。

 c1(rev)      c1(order)     sum of other(rev)          other(order)
  100          1000        500(sum of c2 and c3)      3500(sum of c2 and c3's order)

この種のシナリオのクエリは何でしょうか?

私はクエリを考えていました:

insert into table_name (c1_rev,c1_order,sum_rev,sum_order) 
select rev, order, sum(rev), sum(order) where Company_name=c1 ....

しかし、これを使用して他の2つの合計を見つけることができないため、行き詰まりました。

4

4 に答える 4

0

Group By を使用しないことが最善の解決策ですが、HIVE は今のところサポートしていません。これを試してください。

insert into table table_name 
select rev, order,  sumRev,  sumOrd 
from (
    select Company_name,rev, order, sum(rev)-rev as sumRev, sum(order) - order as sumOrd from base_table 
) a
where Company_name='c1'
于 2013-03-15T14:20:31.260 に答える
0

Hive では、次のようなクエリ:

select sq.cnn,sum(rev),sum(orders) from 
(select if(cn=='c1','c1','other') as cnn, rev,orders from test_cn) sq
group by sq.cnn;

2 行が生成されます。

c1      100     1000
other   500     3500

出力と完全には一致しませんが、必要な形式で抽出できます。

テストするには、次のテキスト ファイルを作成します。

% cat test_cn
c1|100|1000
c2|200|2000
c3|300|3000

そしてハイブで:

hive> drop table if exists test_cn;
hive> create table test_cn (cn string, rev int, orders int) row format delimited fields terminated by '|' stored as textfile;
hive> select sq.cnn,sum(rev),sum(orders) from (select if(cn=='c1','c1','other') as cnn, rev,orders from test_cn)sq group by sq.cnn;
于 2013-03-18T15:58:39.297 に答える
0

SQL サーバーでは、次のようにしてデータを取得できます。

WITH totals AS
(SELECT SUM(rev) revSum, SUM(ORDER_) orderSum 
   FROM T)
SELECT company_name, 
       rev, 
       order_, 
       totals.revsum - rev AS otherRev, 
       totals.orderSum - order_ AS otherOrder
FROM  t, totals
于 2013-03-15T09:24:13.557 に答える
0

このクエリを試してください:

SELECT Company_name ,
  Rev ,
  ORDER,
  (SELECT SUM(Rev ) FROM table_name k WHERE k.Company_name<>t.Company_name
  )"sum of other(rev)",
  (SELECT SUM(order ) FROM table_name k WHERE k.Company_name<>t.Company_name
  )"other(order)"
FROM table_name t
于 2013-03-15T09:30:42.503 に答える