mysql 在一个查询中获取group by sum和total sum

ccgok5k5  于 11个月前  发布在  Mysql
关注(0)|答案(2)|浏览(143)

有没有办法在一次查询中得到所有产品的类别和所有产品的总价的总价。
下面是我使用的按类别给出价格的查询。

SELECT SUM(price) as totalprice
FROM products 
Group BY category_id
z18hc3ub

z18hc3ub1#

使用ROLLUP查询。
GROUP BY子句允许使用WITH ROLLUP修饰符,该修饰符会将额外的行添加到摘要输出中。

SELECT category_id,SUM(price) as totalprice
FROM products 
GROUP BY category_id WITH ROLLUP
s71maibg

s71maibg2#

SELECT category_id, SUM(price) as totalprice
FROM products 
GROUP BY category_id WITH ROLLUP

MySQL Manual: GROUP BY Modifiers
GROUP BY子句允许使用WITH ROLLUP修饰符,该修饰符使汇总输出包括表示更高级别(即超级聚合)汇总操作的额外行。因此,ROLLUP使您能够通过一个查询在多个分析级别上回答问题。例如,ROLLUP可用于提供对OLAP(联机分析处理)操作的支持。
给定以下示例数据:
| id|姓名|类别id|价格|
| - -----|- -----|- -----|- -----|
| 1| prod_1| 1|两点|
| 2| prod_2| 1|三点|
| 3| prod_3| 2|四点|
| 4| prod_4| 2|五点|
| 5个|prod_5| 2|六点|
上述查询将输出:
| 类别id|总价|
| - -----|- -----|
| 1|五点|
| 2|十五点|
| 空值|20点|
您可以扩展上述内容,使用GROUPING()函数来区分超级聚合行中的NULL值和常规分组行中的NULL值:

SELECT
    IF(GROUPING(category_id), 'All categories', category_id) AS category_id,
    SUM(price) as totalprice
FROM products 
GROUP BY category_id WITH ROLLUP

其将输出:
| 类别id|总价|
| - -----|- -----|
| 1|五点|
| 2|十五点|
| 所有类别|20点|

相关问题