按类别计算总量

时间:2017-07-11 08:45:24

标签: php mysql sql

我有3张桌子 Company_categories 公司 daily_rates

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

例如,A类包含3家公司,B类包含5家公司,所以我想总结A类所有3家公司的总量,依此类推我尝试过的所有类别,但我很困惑如何处理第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 />";
 }

任何人都可以帮助我吗

2 个答案:

答案 0 :(得分:1)

联合两次以获得与该类别相关的所有费率

<br>

您查询最重要的差异:

  • 你需要SUM(),而不是COUNT()
  • 仅选择您提出的问题:按类别分类。你不能选择 公司名称旁边(您希望看到哪家公司) 无论如何)

答案 1 :(得分:0)

我不认为这是你错了的连接,它是选择列表和group by子句。

首先,如果您想要总量,请使用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