简体   繁体   中英

How to add column totals to view

I'm constructing a SQL query for a business report (using MySQL). What I would like to do is create a table that looks like the following:

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

I can write a query to output everything except the last line of the table. Is this possible? If so how would one implement it?

I have tried some of the answers below with the following query but it doesn't work. I must be missing something fundamental.

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

I suspect that I can't use group by with rollup within the query that creates reporting table. How would I wrap the query to produce the desired result?

Thanks

try this:

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

I have had a little attempt at this, mainly because i hadn't heard of WITH ROLLUP (thanks biziclop) and I wanted to try it out.

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'

Outputs:

在此处输入图片说明

I'm giving up now, but i am looking forward to seeing how a pro does it!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM