我使用的是Oracle SQL Developer,我有一个名为Stores的表,其中一个位置标识符指向另一个名为" Location"的表,它指向自己以识别它'自己的国家/城市/等。
我想知道某个国家/地区有多少商店,但查询只计算同一城市的商店数量
查询是(问题在计数部分,翻译:tienda-store,lugar-location):
SELECT ti.nro||' '|| ti.calle as "Direccion",l.nombre "Ciudad", lu.nombre "Pais",
(SELECT COUNT(*) FROM tienda tie WHERE tie.fk_lugar = l.id) "Cantidad"
FROM tienda t,THE (SELECT direccion from tienda WHERE tienda.id=t.id)
ti,lugar l, lugar lu
WHERE t.fk_lugar=l.id and l.tipo='CIUDAD' and
l.lugar_id=lu.id and lu.tipo = 'PAIS'
结果是这样的:
Direccion |Ciudad |Pais |Cantidad
address 4|Miami |USA | 1
address 3|New York|USA | 1
address 2|Toronto |Canada| 2
address 1|Toronto |Canada| 2
何时显示:
Direccion |Ciudad |Pais |Cantidad
address 4|Miami |USA | 2
address 3|New York|USA | 2
address 2|Toronto |Canada| 2
address 1|Toronto |Canada| 2
我假设它计算相同的城市,我无法弄清楚如何让它计算国家
答案 0 :(得分:2)
我认为这可以满足您的需求:
select t.direccion, lc.nombre as ciudad, lp.nombre as pais,
count(*) over (partition by lp.nombre)
from tienda t join
lugar lc
on t.fk_lugar = lc.id and lc.tipo = 'CIUDAD' join
lugar lp
on lc.?? = lp.id and lp.tipo = 'PAIS';
关键的想法是count(*) over
。窗口功能可以完成您想要的计数。我不清楚问题join
的正确pais
键是什么。