Как объединить данные из таблицы, чтобы показать сумму продуктов на основе категории, используя каждый месяц в качестве ключа - PullRequest
0 голосов
/ 26 апреля 2018
create table products
    (
        id int not null,
        productname varchar(45),
        productcategory varchar(45),
        productprice decimal(8,2),
        datepurchased varchar(45),
        primary key (id)
    );

 INSERT INTO products (id, productname, productcategory, productprice, datepurchased) VALUES
 (1, 'Toy car', 'toys', 200.30, '2017 December'),
  (2, 'Phone', 'phone', 50.00, '2017 December'),
  (3, 'Disk drive', 'Accessories', 10.00, '2018 January'),
   (4, 'Mouse', 'Accessories', 20.30, '2018 January'),
   (5, 'Baby doll', 'toys', 100.00, '2018 February'),
    (6, 'Toy car', 'toys', 40.10, '2018 March');

My sql fiddle: http://sqlfiddle.com/#!9/4ff0cf/1/0 Результаты должны выглядеть следующим образом.

Month           |  ProductCategory    | Amount
-------------------------------------------------
2017 December   |  toys               | 200.30
2018 January    |  phone              |  50.00
2018 January    |  Accessories        |  30.30
2018 February   |  toys               |  100.00
2018 March      |  toys               |   40.10

Если вы заметили, в Accessories есть несколько записей за январь, и они суммируются.

Пожалуйста, включите sql скрипку в свой ответ, если можете.Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Попробуйте:

select datepurchased month, productcategory, sum(productprice) amount
from products
group by datepurchased, productcategory
order by datepurchased, amount desc;

См. Рабочий DEMO на SQL Fiddle .

0 голосов
/ 26 апреля 2018

Поскольку столбец datepurchased не является столбцом DATE или DATETIME, его необходимо обрабатывать с помощью определенных строковых функций.

Вот ваш ответ, надеюсь, он вам поможет.Любая проблема, дайте мне знать, пожалуйста.

    SELECT
      cte._month
      , cte.productcategory
      , SUM(cte.productprice) AS totalPrice
    FROM (
            SELECT
                id
                ,productname
                ,productcategory
                ,productprice
                ,CAST(SUBSTRING_INDEX(datepurchased, ' ', 1) AS UNSIGNED) AS _year
                ,TRIM(SUBSTRING(datepurchased, POSITION(' ' IN datepurchased), (LENGTH(datepurchased) - 
                            LENGTH(SUBSTRING_INDEX(datepurchased, ' ', 1)))
                            )) AS _month
            FROM products
    ) AS cte
    GROUP BY cte._month, cte.productcategory;

URL-адрес скрипта SQL: http://sqlfiddle.com/#!9/4ff0cf/43

0 голосов
/ 26 апреля 2018

Fiddle здесь: http://sqlfiddle.com/#!9/4ff0cf/15/0

Вы хотите создать группу с несколькими параметрами:

SELECT id, productcategory, sum(productprice), datepurchased FROM
products GROUP BY productcategory, datepurchased;
...