LEFT JOIN查询中的SUM

时间:2016-12-19 21:00:39

标签: mysql

我有两张桌子:

Table products
ID    Name         Base    
1     Product_1    5
2     Product_2    4

Table orders
ID    Product_ID    
1     1            
2     1           
3     2   

我正在使用此查询:

SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter 
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID

得到:

ID    Base    Counter
1     5       2
2     4       1

我现在要做的是编写一个查询,它将返回一个像上面一个表但有额外列SUM的查询 - 基数和计数器的总和:

ID    Base    Counter    SUM
1     5       2          7
2     4       1          5

是否可以使用单个查询来实现此结果?我也想按SUM列订购我的结果。

2 个答案:

答案 0 :(得分:3)

不要过度思考它。只需将它们与加号一起添加即可。

SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter,
products.Base + COUNT(orders.ID) as `SUM`
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID
ORDER BY `SUM`

注意:“SUM”是聚合SQL函数的名称,因此您需要将其包围在反引号中,以便将其用作列别名。考虑使用其他名称。

答案 1 :(得分:1)

SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter, products.Base + COUNT(orders.ID) as `sum`
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID, products.Base
ORDER BY `sum` DESC

始终在group by子句中包含所有非聚合列。见https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

正如您将在该引用中看到的那样,MySQL具有分组的非标准扩展,允许轻松的查询语法。然而,结果依赖于MySQL做出任意选择来实现分组。此外,如果您遵循SQL语法规则,ONLY_FULL_GROUP_BY设置随时更改,如果您在group by子句中包含所有非聚合列,则查询将保持有效。

相关问题