简体   繁体   English

从派生表中提取列并将它们加到一个MySQL SELECT语句中

[英]Pull columns from derived table and sum them in one MySQL SELECT statement

I need to pull column data from two tables, run calculations on the data with the result saved as an alias, and then sum those results into other alias' to display in a php table. 我需要从两个表中提取列数据,对数据进行计算并将结果另存为别名,然后将这些结果求和成其他别名以显示在php表中。 I am trying to achieve this by creating a derived table within my SELECT statement but it doesn't work. 我正在尝试通过在SELECT语句中创建派生表来实现此目的,但是它不起作用。 I don't receive any errors but my table only displays the column headers. 我没有收到任何错误,但是我的表仅显示列标题。

CODE: 码:

$sql = "SELECT x.company, x.stagestatus, x.shippeddate, SUM(x.totprice) as totalprice, SUM(x.sgtotquantity) as sgtotqty, SUM(x.sgtotalsqft) as sgtotsqft, SUM(x.avgsqftrev) as avgsqftrevenue, SUM(x.avgunitrev) as avgunitrevenue FROM (SELECT t1.company, t1.stagestatus, t1.shippeddate, t1.id, FORMAT(TRIM(LEADING '$' FROM t1.totalprice), 2) AS totprice, t2.invoiceid, SUM(t2.quantity) AS sgtotqauntity, FORMAT(SUM(t2.width * t2.height * t2.quantity ) /144, 2) AS sgtotalsqft, FORMAT((TRIM(LEADING '$' FROM t1.totalprice)/(SUM(t2.width * t2.height * t2.quantity ) /144)), 2) as avgsqftrev, FORMAT((TRIM(LEADING '$' FROM t1.totalprice) / SUM(t2.quantity)), 2) AS avgunitrev
  FROM invoices AS t1 INNER JOIN lineitems AS t2 ON t1.id = t2.invoiceid
  WHERE (t2.invoiceid = t1.id)
  GROUP BY t1.id) x
WHERE x.stagestatus='Complete'
GROUP BY x.company ASC";

This code breaks but when I use the smaller pieces individually, it works ok. 这段代码中断了,但是当我单独使用较小的代码时,它可以正常工作。

EX: 例如:

$sql="SELECT invoices.id, invoices.orderdate, invoices.stagestatus, FORMAT(TRIM(LEADING '$' FROM invoices.totalprice), 2) AS totalprice, clients.company, lineitems.invoiceid, SUM(lineitems.quantity) AS sgtotqty, FORMAT(SUM(lineitems.width * lineitems.height * lineitems.quantity ) /144, 2) AS sgtotsqft, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice)/(SUM(lineitems.width * lineitems.height * lineitems.quantity ) /144)), 2) as avgsqftrevenue, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice) / SUM(lineitems.quantity)), 2) AS avgunitrevenue
FROM clients
INNER JOIN invoices ON clients.id = invoices.clientid
INNER JOIN lineitems ON invoices.id = lineitems.invoiceid
WHERE (lineitems.invoiceid = invoices.id) AND invoices.orderdate BETWEEN '".$revenuefrom."' AND '".$revenueto."' AND invoices.stagestatus IN (". implode(',', array_map(function($item) {return '"' . $item . '"'; }, $revenue_check)) .")
GROUP BY invoices.id DESC";

This code works just fine and groups all data by invoices.id. 该代码可以正常工作,并按invoices.id对所有数据进行分组。 However, the project needs were adjusted and now everything must group by invoices.company. 但是,项目需求已调整,现在所有内容都必须按invoices.company分组。 When I simply try to group by invoices.company instead of invoices.id, my table completes but the values for each company row are very inaccurate, (aren't sum()ing right). 当我只是尝试按invoices.company而不是invoices.id分组时,我的表已完成,但每个公司行的值都非常不准确(没有sum()正确)。

PHP CODE where table is built: 建表的PHP CODE:

$result = $conn->query($sql);


    echo "<table id='revenueReportA' align='center' class='report_DT'>
    <thead>
    <tr>

    <th>Customer</th>
    <th>Total Revenue</th>
    <th>Total SQ FT</th>
    <th>AVG Revenue Per SQ FT</th>
    <th>Total Number of Units</th>
    <th>AVG Revenue Per Unit</th>
    </tr>
    </head>";


 if ($result = $conn->query($sql)) {

   // fetch associative array 
  while ($row = $result->fetch_assoc()) {

  echo "<tbody>";
  echo "<tr>";
  echo "<td>" . $row['company'] . "</td>";
  echo "<td>" ."$". $row['totalprice'] . "</td>";
  echo "<td>" . $row['sgtotsqft'] ."&nbsp;&nbsp;". "ft<sup>2</sup>". "</td>";
  echo "<td>" ."$". $row['avgsqftrevenue'] . "</td>";
  echo "<td>" . $row['sgtotqty'] . "</td>";
  echo "<td>" ."$". $row['avgunitrevenue'] . "</td>";
  echo "</tr>";
  echo "</tbody>";
  } 

   echo "</table>";

echo "<BR>";

All help is appreciated. 感谢所有帮助。

Thank you, 谢谢,

I had a spelling mistake and a formatting issue. 我遇到了拼写错误和格式问题。 By formatting the final data instead of formatting within the embedded SELECT statement, my table data was accurate. 通过格式化最终数据而不是在嵌入式SELECT语句中进行格式化,我的表数据是准确的。

Successful CODE: 成功的代码:

$sql = "SELECT x.company, x.stagestatus, x.shippeddate, FORMAT(SUM(x.totprice), 2) as totalprice, FORMAT(SUM(x.sgtotquantity), 2) as sgtotqty, FORMAT(SUM(x.sgtotalsqft), 2) as sgtotsqft, FORMAT(SUM(x.avgsqftrev), 2) as avgsqftrevenue, FORMAT(SUM(x.avgunitrev), 2) as avgunitrevenue FROM (SELECT t1.company, t1.stagestatus, t1.shippeddate, t1.id, TRIM(LEADING '$' FROM t1.totalprice) AS totprice, t2.invoiceid, SUM(t2.quantity) AS sgtotquantity, SUM(t2.width * t2.height * t2.quantity ) /144 AS sgtotalsqft, (TRIM(LEADING '$' FROM t1.totalprice)/(SUM(t2.width * t2.height * t2.quantity ) /144)) as avgsqftrev, (TRIM(LEADING '$' FROM t1.totalprice) / SUM(t2.quantity)) AS avgunitrev
FROM invoices AS t1 INNER JOIN lineitems AS t2 ON t1.id = t2.invoiceid
WHERE (t2.invoiceid = t1.id)
GROUP BY t1.id) x
WHERE x.stagestatus='Complete'
GROUP BY x.company ASC";

Thank you!!! 谢谢!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 MySQL SELECT一个表中的多行,使用WHERE语句在不同表上求和 - MySQL SELECT multiple rows in one table, SUM on different table with WHERE statement 如何使用PHP或MySQL对一个表中的不同列求和,并在另一表中获得求和结果? - How to sum different columns from one table and get the sum result in another table using PHP or MySQL? MySQL-基于一个字段的表中的列总和 - mySQL - Sum columns in a table based on one field Mysql查询选择其中一个表中的总和与另一个表中的行总和进行比较 - Mysql Query select where the sum from one table is compared to the sum of rows in another table 从mysql的3列中选择文件并将其压缩 - Select files from 3 columns in mysql and zip them MySQL从一个表中选择列以与另一个表匹配以拉ID - Mysql select column from one table to match up with another table to pull id Mysql - 如何根据我是否从另一个表中订阅它们来从一个表中选择条目? - Mysql - How to select entries from one table based on whether or not I subscribe to them from another table? 如何从多个表中选择mysql SUM,从另一个表中选择其他列? - How to select mysql SUM from multiple tables and other columns from another table? 如何从多个mysql列中选择不同的值并将它们放在一个PHP数组中? - How do I select distinct values from multiple mysql columns and put them in one PHP array? 汇总一个表中的多列 - sum multiple columns from one table
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM