【问题标题】:SQL Select Statement Not Giving Expected Results?SQL Select 语句没有给出预期的结果?
【发布时间】:2013-10-11 15:01:37
【问题描述】:

我正在尝试编写一个选择语句来显示所有科幻相关类型中的前 10 名演员。相反,我得到了总体排名前 10 位的演员和他们拥有的所有头衔,而不仅仅是科幻小说(这是我想要的)。

select top 10 people_name as actor_name, count(tg_genre_name) as number_of_titles
from nf_people
    join nf_cast on people_id=cast_people_id
    join nf_titles on cast_title_id=title_id
    join nf_title_genres on title_id=tg_title_id
where tg_genre_name like '%Sci-Fi%'
group by people_name
order by number_of_titles desc

【问题讨论】:

  • 是否有理由使用 LIKE 而不是直接相等的流派?
  • 我觉得查询没问题
  • 嗯,这就是我被教导的方式。另外,如果我使用 = 我会得到一个空表,这不应该是这种情况。
  • 好吧,那是个问题...在数据库中“sci-fi”之前或之后是否有空格...如果使用某种导入填充了此数据库,请检查特殊字符.
  • 嗯,有几种不同的类型包含“科幻”……“动作科幻与奇幻”、“外星科幻”。

标签: sql sql-server sql-server-2008


【解决方案1】:
SELECT TOP 10 M.actor_name,  count(*) as number_of_titles FROM
(
  SELECT people_name AS actor_name
  FROM nf_people
       JOIN nf_cast ON people_id=cast_people_id
       JOIN nf_titles ON cast_title_id=title_id
       JOIN nf_title_genres ON title_id=tg_title_id
  WHERE tg_genre_name LIKE '%Sci-Fi%'
) AS M
GROUP BY M.actor_name
ORDER BY count(*) DESC

【讨论】:

  • 我刚刚修改了我的答案,我在 group by 中有错误的字段。
【解决方案2】:

尝试将WHERE 替换为HAVING

WHERE 会选择所有可能拥有科幻小说的作者。 HAVING 限制您正在查找的查询。

【讨论】:

  • 有人可以告诉我为什么这被否决了吗? - 对回答问题比较陌生,如果发生这种情况将停止回答
  • 您是否尝试过使用 HAVING 编写查询来解决作者的问题?因为使用 HAVING 你在聚合发生后过滤掉,所以你会计算不需要的记录
  • 我猜你并不能完全知道这个问题可以通过使用 HAVING 来回答。我一直在做的是,如果您认为您可能知道答案,请发表评论,询问提问者是否尝试过。如果这样可以解决问题,您可以随时将其作为答案。
  • HAVING 应用于 GROUP BY 之后的记录,通常用于检查聚合结果,但问题的作者需要在 GROUP BY 之前过滤记录,不需要接收所有作者从数据库中对它们进行分组,并且仅在按流派过滤之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多