如何计算带有记录限制的联接表的mysql记录?

时间:2018-12-18 10:08:47

标签: mysql postgresql

我有2个表,我想计算它们之间的联接记录:

供应商和供应商地址

每个供应商可以有一个或多个地址,所以我想为前5个供应商计算他们有多少个地址。

尝试了以下内容:

select count(*) from suppliers inner join supplier_addresses limit 5;

但是它不起作用,我该怎么办?

1 个答案:

答案 0 :(得分:1)

您必须使用帮助GROUP BY语句将供应商的地址分组,以使每个供应商正确计算。例如:

> lookup::lookup(dplyr:::rename.data.frame)
dplyr:::rename.data.frame [S3 method, closure] dataframe.R#L122-125
function(.data, ...) {
  vars <- rename_vars(names(.data), !!! quos(...))
  select_impl(.data, vars)
}
<environment: namespace:dplyr>

// c++ source: src/select.cpp#L79-L86
DataFrame select_impl(DataFrame df, CharacterVector vars) {
  check_valid_colnames(df);
  if (is<GroupedDataFrame>(df)) {
    return select_grouped(GroupedDataFrame(df), SymbolVector(vars), SymbolVector(vars.names()));
  } else {
    return select_not_grouped(df, SymbolVector(vars), SymbolVector(vars.names()));
  }
}

如果要按5个供应商获取地址数量,可以使用子查询。例如:

options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)

当然,您可以使用供应商的已定义标识符^

SELECT 
   suppliers.id,
   count(*) 
FROM suppliers 
INNER JOIN supplier_addresses ON suppliers.id = supplier_addresses.supplier_id
GROUP BY suppliers.id
LIMIT 5;