如何获取SQL Developer中的子计数?

时间:2017-02-03 02:33:30

标签: sql count substring oracle-sqldeveloper distinct

我的列中有一个包含电话号码的表格。我想使用COUNT(*)返回特定区域代码显示的次数。

PHONE:
555-555-5565
323-595-8686
666-565-5232
323-599-0000

查询后:

ZIP:   FREQUENCY:
555    1
323    2
666    1

非工作查询:

select distinct (substr(phone,0,3)) as "AREA_CODE", count(distinct substr(phone,0,3)) as "COUNT",
from address

我觉得我应该将电话号码的子字符串作为区域代码作为一个结果列,然后用另一个计算频率,但我似乎无法让它工作。帮助

2 个答案:

答案 0 :(得分:2)

使用select distinct进行此类查询的想法来自何处?

正确的构造是group by。学习SQL!

select substr(phone, 1, 3)) as "AREA_CODE", count(*) as "COUNT"
from address
group by substr(phone, 1, 3)) as "AREA_CODE";

注意:

  • substr()从" 1"开始计数不是" 0"。
  • count(distinct)不合适。它只会在引用group by键时返回1。
  • 实际上,distinct在SQL中是非常特殊的用途。你通常想避免它。

答案 1 :(得分:0)

您可以创建一个存储zip的临时表:

create table #TempTable 
(
    Zip Varchar(3)   
)
INSERT INTO #TempTable (Zip ) 
SELECT substr(phone,0,3) from Address

然后您可以查询并统计此结果:

Select Zip , count(distinct Zip ) as FREQUENCY
from #TempTable
group by Zip