SQL * Plus查询:表与聚合连接

时间:2015-03-20 16:34:36

标签: sql oracle

CREATE TABLE users
()

CREATE TABLE avatars
()

CREATE TABLE weapons
()

我需要对我创建的这些表进行两次查询,而且我在执行此操作时遇到问题,我们将非常感谢您提供帮助。

  1. 对于所有头像产生一个列表,显示头像名称,当前持有的武器总数以及当前持有的所有武器的总成本。除了这三个主要部分之外,我不再需要显示额外信息,因此我需要从表2和表3中获取信息。

  2. 对于任何给定的用户电子邮件(即在运行时输入),按照出生日期的相反顺序列出拥有的头像名称以及该头像持有的武器(包括武器名称,范围和成本)。

  3. 非常感谢任何帮助。我正在使用SQL * Plus。这些表不是很有效,所以任何改进都会受到欢迎,但主要是我需要这些查询的帮助。

1 个答案:

答案 0 :(得分:1)

select
    max(a.name),
    count(1),
    sum(w.cost)
from
    avatars a
    inner join weapons w on w.weapon_id=a.no_wp_id
group by
    a.no_wp_id
;

select
    a.name,
    w.weapon_name,
    w.range,
    w.cost
from
    users u
    inner join avatars a on a.user_id=u.id
    inner join weapons w on w.weapon_id=a.no_wp_id
where
    u.email='given@email.com'
order by
    a.dateOfBirth desc
;

  • 如果您的查询依赖于email是唯一的,那么您应该有一个唯一的密钥。
  • 您的weapons表似乎没有range列,但您暗示它在您对查询#2的要求中有效。无论如何,我已经加入了w.range
  • avatars中,no_wp_id可能应该被命名为avatar_idid,而在weaponsweapon_id应该被命名avatar_id
  • 您应该阅读SQL教程。这是一个:http://www.tutorialspoint.com/sql/sql-overview.htm