小编典典

包含多个JOINS和GROUP BY CLAUSE的查询中的COUNT

sql

我正在处理包含3个表的数据库:

  1. 公司名单
  2. 他们出售的产品表
  3. 他们在每个日期提供的价格表

我在php中进行这样的查询,以生成在特定日期提供特定产品类型最低价格的公司列表。

SELECT
  a.name AS company,
  c.id,
  MIN(c.price) AS apy
FROM `companies` a
JOIN `company_products` b ON b.company_id = a.id
JOIN `product_prices` c ON c.product_id = b.id
WHERE
  b.type = "%s"
  AND c.date = "%s"
GROUP BY a.id
ORDER BY c.price ASC
LIMIT %d, %d

这为我获取了我需要的数据,但是为了在PHP中实现寻呼机,我需要知道总共有多少家公司提供该产品。LIMIT表示我只看到前几个…

我尝试将SELECT子句更改为SELECT COUNT(a.id)或SELECT
COUNT(DISTINCT(a.id)),但这些似乎都不给我我想要的东西。我尝试在我的计数查询中删除GROUP BY和ORDER
BY,但这也不起作用。有任何想法吗?


阅读 179

收藏
2021-04-28

共1个答案

小编典典

在我看来,您应该GROUP BY a.id, c.id-按组进行分组a.id仅意味着通常c.id每个s有几个s
a.id,而您只是得到其中一个“随机的”。这似乎是基本正确性的问题。一旦您解决了该问题,则初始的SELECT COUNT(*) FROMetc等绝对应为您提供以下查询将返回的行数,因此您可以相应地准备您的寻呼机。

2021-04-28