首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用输入条件填充排行榜的查询

使用输入条件填充排行榜的查询
EN

Stack Overflow用户
提问于 2021-10-14 18:18:28
回答 2查看 29关注 0票数 1

我有3张桌子:

代码语言:javascript
复制
PLAYER        (NAME)
ALL_GOALS     (TYPE, GROUP        , POINTS)
GOALS_REACHED (TYPE, EARNED_POINTS, PLAYER_NAME)

我需要写一个给我排行榜的查询。

球员可以进入排行榜,当且仅当他与GROUP='IMPORTANT'达到至少一个目标。

例如:

代码语言:javascript
复制
 +--------------+
 | PLAYER       |
 +--------------+
 | John         |
 | Bill         |
 | Bob          |
 | Willy        |
 +--------------+

 +-------------------+
 | ALL_GOALS         |
 +-------------------+
 | A, IMPORTANT, 100 |
 | B, IMPORTANT, 200 |
 | C, OTHER, 10      |
 | D, OTHER, 10      |
 +-------------------+

 +--------------+
 | GOALS_REACHED|
 +--------------+
 | A, 100, John |
 | B, 200, Willy|
 | C, 10, Bob   |
 | D, 10, Bob   |
 +--------------+

我只想在我的排行榜上看到约翰和威利

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 18:26:24

像这样的东西?(第1-13行的样本数据;查询从第14行开始)

代码语言:javascript
复制
SQL> with
  2  all_goals (type, cgroup, points) as
  3    (select 'A', 'IMPORTANT', 100 from dual union all
  4     select 'B', 'IMPORTANT', 200 from dual union all
  5     select 'C', 'OTHER'    ,  10 from dual union all
  6     select 'D', 'OTHER'    ,  10 from dual
  7    ),
  8  goals_reached (type, earned_points, player_name) as
  9    (select 'A', 100, 'John'  from dual union all
 10     select 'B', 200, 'Willy' from dual union all
 11     select 'C',  10, 'Bob'   from dual union all
 12     select 'D',  10, 'Bob'   from dual
 13    )
 14  select r.player_name
 15  from goals_reached r join all_goals g on g.type = r.type
 16  where g.cgroup = 'IMPORTANT'
 17    and g.points > 0;

PLAYE
-----
John
Willy

SQL>
票数 1
EN

Stack Overflow用户

发布于 2021-10-15 07:36:13

感谢@Littlefoot answer和@mathguy有用的评论,我改进了查询并基于它创建了一个视图。这个看起来最像是一个无序的排行榜。

代码语言:javascript
复制
select gr1.PLAYER_NAME, sum(gr1.EARNED_POINTS)
from GOALS_REACHED gr1
where exists(
  select *
  from GOALS_REACHED gr2
       inner join ALL_GOALS ag
       on gr2.TYPE=ag.TYPE
  where ag.GROUP='IMPORTANT' 
        and gr1.PLAYER_NAME=gr2.PLAYER_NAME
)
group by gr1.PLAYER_NAME
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69575561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档