Php 按类别计算总体积

Php 按类别计算总体积,php,mysql,sql,Php,Mysql,Sql,我有三张桌子 公司类别 公司 每日租金 我想从行业角度计算所有公司类别中存在的总数量 例如,类别A包含3家公司,类别B包含5家公司,因此我想对类别A中所有3家公司的总数量求和,依此类推,对于所有类别,我尝试这样做,但我不知道如何使用第三个表,因为我很容易能够计算类别中包含的公司,但不确定如何计算所有公司都存在于一个类别中 我的桌子结构 company_categories id name +------------+----------+ | 1

我有三张桌子 公司类别 公司 每日租金

我想从行业角度计算所有公司类别中存在的总数量

例如,类别A包含3家公司,类别B包含5家公司,因此我想对类别A中所有3家公司的总数量求和,依此类推,对于所有类别,我尝试这样做,但我不知道如何使用第三个表,因为我很容易能够计算类别中包含的公司,但不确定如何计算所有公司都存在于一个类别中

我的桌子结构

company_categories 
      id         name
+------------+----------+
|     1      |    A     |
|------------|----------|
|     2      |    B     |
|------------|----------|


companies 
      id         name      category
+------------+----------+-----------+
|     1      |    co 1  |      1    |
|------------|----------|-----------|
|     2      |    co 2  |      2    |
|------------|----------|-----------|
|     3      |    co 3  |      1    |
|------------|----------|-----------|

daily_stock_rates
      id         traded_volume     company_id  
+------------+------------------+---------------+
|     1      |    40            |      1        |
|------------|------------------|---------------|
|     2      |    80            |      2        |
|------------|------------------|---------------|
|     3      |    30            |      3        |
|------------|------------------|---------------|
这是我的密码

$sql = mysqli_query($connect, "SELECT c.id category_id, c.name category_name, com.id, com.category count( dsr.total_traded_volume ) total_volume
FROM company_categories c
INNER JOIN companies com ON c.id = com.category
LEFT JOIN daily_stock_rates dsr ON com.id = dsr.company_id
GROUP BY com.category
ORDER BY total_volume DESC LIMIT 10");

while($data = mysqli_fetch_assoc($sql)) {
     echo $data['category_name'] . ": .".$data['total_volume'];
     echo "<br />";
 }

有谁能帮我两次,以获得与该类别相关的所有费率

SELECT cat.name, SUM(rat.traded_volume) volume
FROM company_categories cat
JOIN companies comp ON comp.category = cat.id
JOIN daily_stock_rates rat ON rat.company_id = comp.id
GROUP BY cat.name
ORDER BY volume DESC
LIMIT 10
与您的查询最重要的区别:

你需要的是数量,而不是数量 仅选择您要求的内容:按类别的数量。您不能选择 您希望看到的公司旁边的公司名称 反正在那里
我不认为是join错了,而是select列表和groupby子句错了

首先,如果需要卷的总数,请使用sum,而不是count。此外,如果要按类别计算总计,请不要在“选择”列表中包含太多字段:

SELECT c.id category_id, c.name category_name, sum( dsr.total_traded_volume ) total_volume
FROM company_categories c
LEFT JOIN companies com ON c.id = com.category
LEFT JOIN daily_stock_rates dsr ON com.id = dsr.company_id
GROUP BY c.id
ORDER BY total_volume DESC LIMIT 10