【问题标题】:how to count in mysql records of joined tables with records limit?如何计算具有记录限制的连接表的mysql记录?
【发布时间】:2018-12-18 10:08:46
【问题描述】:

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

供应商和供应商地址

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

试过类似的东西:

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

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

【问题讨论】:

  • 请避免使用count(*) 而不是count(id) 或某些特定字段,这样更有效
  • “不工作”是什么意思?一个错误?出乎意料的结果?我可以猜到,但请尝试具体说明您的问题是什么,这会有所帮助。顺便说一句,为什么只有“前 5 个”?首先是什么? ID?姓名? (请记住,在表中排在第一位是没有意义的——SQL 表本身并没有顺序。理论上,如果您在未指定顺序的情况下进行选择,则允许数据库以它喜欢的任何顺序为您提供结果)
  • '前 5 家供应商' - 按字母顺序,按销售额??
  • @ADyson 抱歉。我得到了所有加入的结果,而不仅仅是 5 条记录。
  • 好吧,为您提供更多帮助,您需要回答有关如何确定“前 5 个”的问题。实际上,向我们展示一些示例数据,然后您的预期查询结果将使其 100% 更清晰。

标签: mysql postgresql


【解决方案1】:

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

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

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

SELECT count(*)
FROM supplier_addresses 
WHERE supplier_id IN (
   SELECT id
   FROM suppliers
   LIMIT 5)

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

SELECT count(*)
FROM supplier_addresses 
WHERE supplier_id IN (1,2,3,4,5)

【讨论】:

  • 如何计算总数?而不是获取 id 和记录数的表?
  • 我真正需要的是总和,而不是 id 及其总和的表...@Maxim Fedorov
  • 运行中间命令时我得到RROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' :\ 我使用最新的mysql版本之一
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多