我是一个SQL新手。我遇到的任务是输出一个包含两列的表:服务名称和计数(请求此服务的时间数)。
现在我有一个包含两列的n中间表。它有一个服务ID列,而不是服务名称列,可用于从service表中检索服务名称。
我想知道如何保留count列,以便我可以在将id转换为名称后将其添加到最终结果中。我试着用With(…)至于存储中间表,但Oracle似乎不识别语法。任何帮助都是感激的。谢谢!
这个查询将允许您基于前两个表创建第三个表。
CREATE TABLE table3
AS
SELECT * FROM table1
INNER JOIN table2 ON table1.ServiceId = table2.ServiceId
如果您发布您真正拥有的(表的描述)和一些示例数据以及所需的输出,将会有所帮助。
我是这样理解的:
样本数据:
SQL> with
2 service (service_id, name) as
3 (select 1, 'Service 1' from dual union all
4 select 2, 'Service 2' from dual
5 ),
6 intermediate (inter_id, service_id, datum) as
7 (select 1, 1, date '2022-05-13' from dual union all
8 select 2, 1, date '2022-04-28' from dual union all
9 select 3, 1, date '2022-03-07' from dual
10 )
查询从这里开始;它选择服务名称和每个服务被请求的次数。表是外连接的(因为服务#2还没有任何请求,所以如果是内连接,你根本不会得到它):
11 select s.name,
12 count(i.inter_id) times_requested
13 from service s left join intermediate i on i.service_id = s.service_id
14 group by s.name
15 order by s.name;
NAME TIMES_REQUESTED
--------- ---------------
Service 1 3
Service 2 0
SQL>