0

我有一个包含两个成本的数据库表。我想找到这两列的不同成本。我也想找出这些成本出现的次数。该表可能看起来像

|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    |

我可以通过执行类似的操作来获得两列的不同

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 数据库。

谢谢

4

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 相等,你想计算一次而不是两次,将union alla 改为 a 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 回答