【发布时间】:2016-06-30 15:48:04
【问题描述】:
我有一个关于 SQL 查询的问题,它可以在“普通”SQL 中完成,但我确信我需要使用一些组连接(不能使用 MySQL)所以第二个选项是 ORACLE 方言,因为会有是Oracle数据库。假设我们有以下实体:
表格:兽医访问
Visit_Id,
Animal_id,
Veterinarian_id,
Sickness_code
假设有 100 次访问 (100 visit_id),每个 animal_id 访问大约 20 次。
我需要创建一个 SELECT ,按 Animal_id 分组,包含 3 列
- animal_id
- 第二个显示该特定动物的流感就诊总数(假设是流感,sickness_code = 5)
- 第 3 列显示每种动物的前三个疾病代码(该特定动物 ID 的前 3 个最常见的代码)
怎么做?第一列和第二列很容易,但第三列呢?我知道我需要使用 Oracle 的 LISTAGG、OVER PARTITION BY、COUNT 和 RANK,我试图将它结合在一起,但没有达到我的预期:(这个查询应该是什么样子?
【问题讨论】:
-
您好!欢迎来到 StackOverflow!您能否发布一小部分示例数据以及您希望输出的示例?
-
请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
-
How to create a Minimal, Complete, and Verifiable example 例如,而不是 100 次访问使用 10。两只动物,每只动物获得 5 次访问。并以 TOP 2 结果显示结果。
-
在平局的情况下,期望的输出是什么?例如,如果第三和第四最常见的代码都出现 11 次怎么办?应该选择哪个代码?另外,如果两个代码并列第一,应该先显示哪个?