如何添加列总计以进行查看

时间:2012-02-20 19:14:27

标签: mysql totals

我正在为业务报告构建SQL查询(使用MySQL)。我想要做的是创建一个如下所示的表:

Product | Quantity | Price | Total
widget1 |    3     |  1.00 | 3.00
widget1 |    1     |  1.00 | 1.00
widget1 |    2     |  1.00 | 2.00
widget1 |    3     |  1.00 | 3.00
Total   |    9     |  1.00 | 9.00

我可以编写一个查询来输出除表格最后一行之外的所有内容。这可能吗?如果是这样,如何实现呢?

我使用以下查询尝试了下面的一些答案,但它不起作用。我必须遗漏一些基本的东西。

SELECT uc_order_products.nid AS nid,
  uc_orders.order_id AS 'order_id',
  first_name.value AS 'firstname', 
  last_name.value AS 'lastname',
  uc_order_products.title AS 'program',
  uc_order_products.qty AS 'quantity',
  uc_order_products.price AS 'price',
  (uc_order_products.qty * uc_order_products.price) AS 'total',
  sum(uc_order_products.qty) AS 'total quantity',
  sum(uc_order_products.qty * uc_order_products.price) AS 'total revenue'
FROM profile_values first_name
INNER JOIN profile_values last_name ON first_name.uid = last_name.uid
LEFT JOIN uc_orders uc_orders ON uc_orders.uid = first_name.uid
LEFT JOIN uc_order_products uc_order_products ON uc_orders.order_id = uc_order_products.order_id
WHERE uc_orders.order_status IN ('completed') 
  AND first_name.fid =5 
  AND last_name.fid =6 
  AND COALESCE(:nid,nid) = nid
GROUP BY uc_order_products.nid WITH ROLLUP

我怀疑我无法在创建报告表的查询中使用group by with rollup。如何包装查询以产生所需的结果?

谢谢

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT
    product,
    COUNT(product) AS quantity,
    SUM(price) price
FROM product
GROUP BY product WITH ROLLUP

答案 1 :(得分:0)

我有一点尝试,主要是因为我没有听说过WITH ROLLUP(感谢biziclop),我想尝试一下。

CREATE TABLE test.MyTable( 
    product TEXT(10), 
    quantity NUMERIC, 
    price NUMERIC 
);

INSERT INTO MyTable VALUES
    ("widget1", 3, 1),
    ("widget1", 1, 1),
    ("widget1", 2, 1),
    ("widget1", 3, 1),
;



SELECT 
    Product,
    Quantity,
    Price,
    Total
FROM
    (
    SELECT
        rownum,
        COALESCE(Product, 'Total') AS Product, 
        Quantity,
        Price,
        (Quantity * Price) AS Total
    FROM    
        (
        SELECT
            @rownum:=@rownum+1 rownum,   
            Product,
            SUM(Quantity) AS Quantity,
            Price AS Price

        FROM
            MyTable,
            (SELECT @rownum:=0) r
        GROUP BY
            product, rownum
        WITH ROLLUP 
        )
        AS myalias
    ) AS myalias2
WHERE rownum IS NOT NULL
OR Product = 'Total'

输出:

enter image description here

我现在放弃了,但我很期待看到专业人士如何做到这一点!