【问题标题】:How should I modify my query我应该如何修改我的查询
【发布时间】:2014-11-03 07:41:18
【问题描述】:

我使用以下查询确定了类别中最受欢迎的演员 (topActor):

SELECT category_id AS cid,
     (SELECT actor_id FROM 
 film_actor JOIN film_category 
   ON  film_actor.film_id = film_category.film_id
         WHERE category_id = cid 
         GROUP BY actor_id
         ORDER BY COUNT(*) DESC
         LIMIT 0,1) AS topActor
 FROM film_actor JOIN film_category 
   ON  film_actor.film_id = film_category.film_id
 GROUP BY category_id


+-----+----------+
| cid | topActor |
+-----+----------+
|   1 |       50 |
|   2 |      150 |
|   3 |       17 |
|   4 |       86 |
|   5 |      196 |
|   6 |       48 |
|   7 |        7 |
|   8 |       79 |
|   9 |      164 |
|  10 |       68 |
|  11 |       27 |
|  12 |      108 |
|  13 |      105 |
|  14 |      107 |
|  15 |       83 |
|  16 |       44 |
+-----+----------+
16 rows in set (0.00 sec)

现在我需要从 first_namelast_name >actor,包含 actor_id、first_namelast_name。我知道如何使用 PL/SQL 或 SAS 来做到这一点,但我是 MySQL 新手。请帮忙!谢谢你。

【问题讨论】:

  • 不要在SELECT 子句中使用嵌套查询 - 加入它
  • 请发布一个 sql 文件或至少您的相关数据库结构。

标签: mysql


【解决方案1】:

据我了解,您想从演员表中获取 fname 和 lname 的值,外键是 actor_id,所以我认为可以这样做。

SELECT category_id AS cid,
 (SELECT actor_id FROM 
 film_actor JOIN film_category 
 ON  film_actor.film_id = film_category.film_id
     WHERE category_id = cid 
     GROUP BY actor_id
     ORDER BY COUNT(*) DESC
     LIMIT 0,1) AS topActor, actor.fname, actor.lname
 FROM film_actor inner JOIN film_category 
 ON  film_actor.film_id = film_category.film_id inner join actor on film_actor.actor_id = actor.id
 GROUP BY category_id

我不太明白你的问题是什么,所以如果这个答案是错误的,请告诉我是哪一部分。

【讨论】:

  • 非常感谢!我很抱歉不清楚我的问题。不过你理解它并完美回答!
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多