【问题标题】:SQL count on a joined table连接表上的 SQL 计数
【发布时间】:2017-07-26 06:55:42
【问题描述】:

我有两张桌子,一张是Persons,一张是Relationships

我想检索孩子最多的人。

目前我正在加入这样的表格:

SELECT 
   PERSONS.ID, 
   PERSONS.NATIVE_COUNTRY, 
   RELATIONSHIPS.PERSON_ID, 
   RELATIONSHIPS.RELATION 
FROM PERSONS
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID 
                            AND RELATIONSHIPS.RELATION = 'child';

现在我正在尝试计算 PERSONS.ID 并获得最大值,但不知道该怎么做。

【问题讨论】:

  • 你能提供更多关于你的桌子和预期结果的信息吗?

标签: sql select join count


【解决方案1】:

您可以通过 ... 使用分区

SELECT PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID, 
       RELATIONSHIPS.RELATION,
       count(*) over (partition by Persons.ID order by Persons.ID)
FROM PERSONS
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND 
                            RELATIONSHIPS.RELATION = 'child';

另外,如果你不喜欢分区,你可以做简单的 GROUP BY

SELECT PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID, 
       RELATIONSHIPS.RELATION,
       COUNT(*)
FROM PERSONS
INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND 
                            RELATIONSHIPS.RELATION = 'child';
GROUP BY  PERSONS.ID, PERSONS.NATIVE_COUNTRY, RELATIONSHIPS.PERSON_ID,
          RELATIONSHIPS.RELATION

另外,在使用连接时尽量使用别名,这样更便于阅读,而且没有理由全部使用大写字符

【讨论】:

  • 我不想打开类似问题的新主题:我正在尝试检索数据库中每个国家/地区的一个人的平均儿童数量(有一个字段Persons.Country)
  • 在这个连接中添加'Country'表,而不是计数只使用AVG函数
【解决方案2】:

您可以尝试使用 group by:

SELECT PERSONS.ID, COUNT(*) "No of Children" FROM PERSONS INNER JOIN RELATIONSHIPS ON RELATIONSHIPS.PERSON_ID = ID AND RELATIONSHIPS.RELATION = 'child' GROUP BY persons.id;

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多