【问题标题】:SQL Group By Sub QuerySQL 按子查询分组
【发布时间】:2012-06-11 22:53:51
【问题描述】:

我不完全理解子查询如何被外部查询访问,所以我需要一些关于这个问题的帮助。以下是四种模式。

Movie(title, year, director, budget, earnings)
Actor(stagename, realname, birthyear)
ActedIn(stagename, title, year, pay)
CanWorkWith(stagename, director)

找出在电影中获得最高报酬的演员的名字。 据我所知,它要求为每部电影找到片酬最高的演员……但仔细想想,括号可能表明谁的片酬最高,也许一对夫妇的片酬相同。无论如何..

我有什么

SELECT A.realname
FROM ActedIn A
WHERE A.stagename IN ( SELECT A1.title, A1.year, MAX(pay)
                       FROM ActedIn A1
                       GROUP BY title, year )

我知道 WHERE A.stagename IN 完全错误,我只是不知道如何将其链接回来。

【问题讨论】:

    标签: sql group-by subquery max


    【解决方案1】:

    如果我很好理解,这就足够了:

    SELECT A.realname
    FROM ActedIn A
    WHERE pay = (SELECT MAX(pay) FROM ActedIn B WHERE B.stagename = A.stageman)
    

    【讨论】:

      【解决方案2】:

      子查询的概念很简单。这只是一个观点问题。当您编写子查询时,它是处理的第一段。由于它在外部查询之前被完全处理,子查询的输出应该对外部查询有意义。在您上面提供的示例中,

      SELECT A.realname FROM ActedIn A WHERE A.stagename IN 
      ( SELECT A1.stagename FROM CanWorkWith A1 ) 
      

      当这个查询运行时,来自 CanWorkWIth 的 stagename 被首先处理并给出 stagename 作为输出。期望 A.stagename 的外部查询接收此值,然后执行外部查询。

      子查询的编写方式没有限制。

      我希望你明白这一点。既然您了解了子查询的工作原理,我鼓励您自己解决问题并在此处使用您的新 sql 提问。祝你好运。

      【讨论】:

      • 这行得通吗? SELECT A.realname FROM ActedIn A WHERE A.stagename IN (SELECT A1.stagename, MAX(pay) FROM ActedIn A1 GROUP BY A1.stagename )
      • 不,不会。在您更新的查询中, A.stagename 只需要舞台名称,但您的子查询给出了舞台名称及其最高工资。所以这个查询不起作用。看看aleroot的解决方案。那应该对你有帮助。尝试一些其他查询以很好地掌握子查询的工作原理。祝你好运。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 2018-09-16
      • 2019-01-07
      • 2010-12-12
      相关资源
      最近更新 更多