我有2个表,我想计算它们之间的联接记录:
供应商和供应商地址
每个供应商可以有一个或多个地址,所以我想为前5个供应商计算他们有多少个地址。
尝试了以下内容:
select count(*) from suppliers inner join supplier_addresses limit 5;
但是它不起作用,我该怎么办?
答案 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;