0

我想从销售表中汇总金额并希望按品牌对其进行分组,谁能帮我正确查询 php mysql。

--- product ---

id  pcode   pname   brand
1   123     Dalda   1
2   124     Habib   1
3   125     Sufi    2
4   126     Toyota  3



--- sale ---
id  pcode   pname   amount
1   123     Dalda   1020
2   123     Dalda   1020
3   124     Habib   1030
4   124     Habib   1030
5   125     Sufi    1040
6   125     Sufi    1040
7   126     Toyota  1050
4

3 回答 3

1
SELECT
  p.pname,
  IFNULL(SUM(amount), 0) AS TotalAmount
FROM product p
LEFT JOIN sale s ON p.pcode = s.pcode
GROUP BY p.pname;

SQL 小提琴演示

这会给你:

|  PNAME | TOTALAMOUNT |
------------------------
|  Dalda |        2040 |
|  Habib |        2060 |
|   Sufi |        2080 |
| Toyota |        1050 |

请注意:不需要将 存储pname在第二个表中Sale。删除它,因为它已经存储在第一个表中Product

于 2013-02-04T10:16:35.747 回答
1
select p.brand, sum(s.amount)
FROM product p
INNER JOIN sale s on s.pcode = p.pcode
GROUP BY p.brand 

您将仅获得在销售表中有条目的品牌。

如果您想要所有品牌,即使在销售表中没有条目,也可以使用 aLEFT JOIN

COALESCE(SUM(amount, 0))

顺便说一句,正如 Mahmoud Gamal 所指出的,您不需要表 Sale 中的 pname。我也不会使用 pcode 作为“关系列”,而是使用产品 ID。例如,您可以删除 pcode 和 pname 并使用新列 p_id。

于 2013-02-04T10:16:46.217 回答
0
select pr.pcode,pr.pname,pr.brand,sum(s.amount)
from product pr
left join sale s
on pr.pcode=s.pcode
group by pr.pcode,pr.pname,pr.brand
于 2013-02-04T10:19:45.237 回答