【问题标题】:SQL Server: Parent id with the least number of childrenSQL Server:具有最少子级的父级 ID
【发布时间】:2016-01-07 00:19:36
【问题描述】:

我有两张桌子ClientInstructor

客户表:

id_client|name_client|FK_instructor
---------+-----------+------------
    1    | Clinton   |    2
    2    | Gates`    |    1
    3    | Bush      |    1
    4    | Clinton   |    2
    5    | Obama     |    1
    6    | Jack      |    3

导师表:

id_instructor|name_instructor
-------------+---------------
      1      |    Sara
      2      |    Sam            
      3      |    Dean
      4      |    Julie
      5      |    Jake

我想选择关联客户数量最少的 3 位讲师。

提前谢谢你。

【问题讨论】:

  • 这适用于哪个 DBMS?
  • 听起来像是一个 group by 的工作,有一个 join、一个 order by 和一个限制。
  • 我正在使用 SQL Server

标签: sql-server select join


【解决方案1】:

既然您提到您正在使用 SQL Server,除了 GROUP BYORDER BY 之外,您还需要在您的 SELECT 上添加一个 TOP(3)

SELECT   TOP(3) i.id_instructor, i.name_instructor
FROM     Instructor i
JOIN     Client c ON c.FK_instructor = i.id_instructor
GROUP BY i.id_instructor, i.name_instructor
ORDER BY COUNT(*) --Implicitly ascending

请注意,我将讲师 ID 添加到组中,与其他答案相比,以防多个讲师具有相同的姓名。

【讨论】:

  • 谢谢,这正是我所需要的
【解决方案2】:

如果您正在使用 Netezza,您可以尝试:

SELECT name_instructor, COUNT(id_client)
FROM instructor_table
    JOIN client_table on instructor_table.id_instructor = client_table.FK_instructor
GROUP BY name_instructor
ORDER BY COUNT(id_client) DESC
LIMIT 3

这里有很好的 Netezza 文档: http://www-304.ibm.com/support/knowledgecenter/SSULQD_7.2.0/com.ibm.nz.dbu.doc/c_dbuser_sql_grammar.html

这里还有 SQL 教程: http://www.w3schools.com/sql/

【讨论】:

  • 这将返回具有 最多 个客户端的讲师,而不是具有 最少 个客户端的讲师(您应该提及这是哪个 DBMS , LIMIT 是非标准 SQL)
  • 这个问题太模糊,无法回答。您可能要补充一点,此解决方案适用于 MySQL。如果数据库是 SQLServer,这将不会运行。 DESC 也是错误的。
  • 感谢您的回答,确实我正在使用 SQL Server 并且 LIMIT 不起作用。这个查询给了我一个包含他们拥有的客户数量的讲师列表,但我希望结果只是客户数量最少的 3 个讲师的名字。就像我们有 10 位讲师,每个人都有一定数量的客户,我只想要客户数量最少的 3 位。
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
相关资源
最近更新 更多