【问题标题】:Counting several stores in different countries issue数数不同国家的几家商店的问题
【发布时间】:2016-06-03 00:45:35
【问题描述】:

我正在使用 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   

我假设它计算的是相同的城市,但我不知道如何让它计算国家

Tienda inserts

Lugar inserts

【问题讨论】:

  • 你能展示你的数据集吗?
  • 编辑添加数据集图片@realspirituals
  • 最好是文本形式的数据,最好是我们可以重建的格式。但是从这些图像来看,所有美国商店的候选值是否应该是 3(来自芝加哥、迈阿密和达拉斯的商店),而所有加拿大商店的候选值应该是 3(来自多伦多的三个商店)?所有其他商店都应该有行吗?
  • 没错,美国、加拿大、德国和英国在“Cantidad”中应该有 3 个,而其他国家(比利时、丹麦等其他国家/地区)应该有 1 个。我会尝试添加 create并立即插入序列
  • 我认为 Gordon 展示的内容是正确的,on lc.fk_lugar = lp.id?或者无论如何关闭,它不会以相同的方式提取对象字段。

标签: sql oracle count


【解决方案1】:

我认为这是你想要的:

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

【讨论】:

  • 抱歉,没说清楚。 lugar l 将指向一个城市,而 lugar lu 将指向一个国家。所以 lu.id 指向国家的身份证号码。我添加了数据集图片以供更多参考
  • 之前添加了错误的数据,谢谢您的回答。现在效果很好
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多