0

2 つのコストを含むデータベース テーブルがあります。これら 2 つの列の個別のコストを見つけたいと考えています。また、これらのコストが表示されるカウントを見つけたいと考えています。テーブルは次のようになります

|id|cost1|cost2|
|1 |50   |60   |
|2 |20   |50   |
|3 |50   |70   |
|4 |20   |30   |
|5 |50   |60   |

この場合、両方の列で異なる結果が必要であり、表示される回数を数えます。だから私が望む結果は

|distinctCost|count|
|20          |2    |
|30          |1    |
|50          |4    |
|60          |2    |
|70          |1    |

そして理想的に注文された

|disctinCost1|count|
|50          |4    |
|60          |2    |
|20          |2    |
|70          |1    |
|30          |1    |

次のようなことを行うことで、2つの列で明確に取得できます

select DISTINCT c FROM (SELECT cost1 AS c FROM my_costs UNION SELECT cost2 AS c FROM my_costs);

そして、次のようにして各列のカウントを取得できます

select cost1, count(*)
from my_costs 
group by cost1
order by count(*) desc;

私の問題は、両方の列のカウントを取得するにはどうすればよいですか? 個々の列ごとにカウントしてから合計する方法にこだわっています。

任意のポインタをいただければ幸いです。

Oracle DB を使用しています。

ありがとう

4

2 に答える 2

2

2 つのクエリを組み合わせることで..

select cost, count(*)
from
(
    SELECT id, cost1 AS cost FROM my_costs 
    UNION ALL
    SELECT id, cost2 AS c FROM my_costs
) v
group by cost
order by count(*) desc;

(行の cost1 と cost2 が等しい場合、それを 2 回ではなく 1 回カウントする場合は、 を に変更union allしますunion)

于 2012-10-16T09:37:57.287 に答える
0

unpivotステートメントを使用できます:

select * 
from 
(
  SELECT cost , count(*) as num_of_costs
  FROM   my_costs 
  UNPIVOT 
  (
     cost                          
     FOR cost_num IN  (cost1,cost2) 
  )
 group by cost
) 
order by num_of_costs desc;
于 2012-10-16T17:30:33.733 に答える