Как добавить итоги столбцов для просмотра - PullRequest
0 голосов
/ 20 февраля 2012

Я создаю 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 с накоплением в запросе, который создает таблицу отчетов.Как бы я обернул запрос, чтобы получить желаемый результат?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

У меня была небольшая попытка сделать это, главным образом потому, что я не слышал о 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

Сейчас я сдаюсь, но я с нетерпением жду возможности увидеть, как это делает профессионал!

0 голосов
/ 20 февраля 2012

попробуйте это:

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