我有两张桌子:
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列订购我的结果。
答案 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子句中包含所有非聚合列,则查询将保持有效。