【发布时间】:2013-02-27 22:49:45
【问题描述】:
我向你寻求帮助是因为我不太了解 SQL。
我需要从表列中计算一些值的出现次数,以达到如下图所示的统计表效果:
需要的结果:
评论:
我的结果表需要有前两列(contry 和 site)来自第一个表“Violations”,接下来的 5 列将包含每个可能的 id 值中“Violations”中 status_id 出现次数(计数)状态表。
解释:
所以,我有两个表:Violations 和 Status。请看我的sqlfiddle
违规:
- id 长,
- 国家/地区 varchar(20),
- 站点 varchar(20),
- status_id long,
- ...在这种情况下其他不重要的列
状态:
- id 长,
- 状态长 “状态”列的值 (1-4) 映射到字符串值:疑似违规 (1)、确认违规 (2)、确认无违规 (3)、未确定 (4)
在我的加入(或仅基于一个表违规)的结果中,表应该包含列:
- 来自违规表:“国家/地区”和“网站”
- 来自状态表:“怀疑违规”、“确认违规”、“确认无违规”、“未确定”、“总计”(其中此列是违规表中出现的计数器)。
当前状态和新要求:
第一次尝试在下面完成(感谢 bluefeet),几乎完美......
select v.country,
v.site,
SUM(case when s.id = 1 then 1 else 0 end) Total_SuspectedViolations,
SUM(case when s.id = 2 then 1 else 0 end) Total_ConfirmedViolations,
SUM(case when s.id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
SUM(case when s.id = 4 then 1 else 0 end) Total_NotDetermined,
COUNT(*) Total
from violations v
inner join status s
on v.status_id = s.id
group by v.country, v.site
或不加入:
select v.country,
v.site,
SUM(case when v.status_id = 1 then 1 else 0 end) Total_SuspectedViolations,
SUM(case when v.status_id = 2 then 1 else 0 end) Total_ConfirmedViolations,
SUM(case when v.status_id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
SUM(case when v.status_id = 4 then 1 else 0 end) Total_NotDetermined,
COUNT(*) Total
from violations v
group by v.country, v.site
...但不包括您在图片中看到的 3 个问题。我的意思是:
- “-全部-”应该计算所有国家/地区的出现次数
- "- Unknown -" 应该计算某些未识别国家/地区的出现次数
- “- 全部 -”(针对每个国家/地区)- 应计算一个国家/地区内的出现次数
补充说明:
-
-Unknown-含义:
Unknown 应该计算例如在 DB Country 表中不存在或名称/ID 错误的国家/地区的出现次数,这就是为什么这里将其视为 Unknown(我忘了提到 DB 中有表 Country) .
站点也是如此,站点的Unknown 意味着有人在 Violations.status_id 中输入了错误的值,而不是在范围 (1-4) 中,因为这些只是状态表中存在的可接受值。
- 我们可以假设表 Country 如下所示:
国家:
- id 长,
- 名称 varchar(30)
请帮助我编写包含这 3 个条件的正确 sql 查询,因为我有一个大问题要做。
【问题讨论】:
-
如何指定
Unknown国家/地区? -
你能确认你使用的是什么数据库吗?
-
Unknown应该计算国家/地区的出现次数,例如在 DB Country 表中不存在或名称/id 错误的国家/地区,这就是为什么在这里被视为未知的原因(我忘了提到有表 Country在数据库中)。站点也是如此,站点的Unknown意味着有人在 Violations.status_id 中输入了错误的值,而不是在范围 (1-4) 中,因为这些只是状态表中存在的可接受值。 -
我正在使用 Oracle 11g 数据库
-
@Roman 你花了多少时间来写和解释问题? :P 感谢您的努力
标签: sql jpa join count oracle11g