Сводная таблица MySQL? - PullRequest
       4

Сводная таблица MySQL?

0 голосов
/ 14 февраля 2020

У меня есть запрос:

SELECT item_id, 
       MAX(CASE WHEN `vendor_id` = 2 
                THEN price 
                END) AS "Bandung", 
       MAX(CASE WHEN `vendor_id` = 3 
                THEN price 
                END) AS "Vendor Bandung", 
       MAX(CASE WHEN `vendor_id` = 4 
                THEN price 
                END) AS "Jakarta", 
       MIN(price) 
FROM transactions 
GROUP BY item_id

Выход:

enter image description here

Я хочу получить подробную информацию о цене, откуда .. как показано ниже

|ItemID|Bandung|Vendor Bandung|Jakarta |Price Min|*Area*
|10001 |12000  |11000         |9000    |9000     |*Jakarta|*
|10002 |12000  |11000         |12400   |11000    |*Vendor Bandung|*
|10004 |12000  |11000         |12400   |11000    |*Vendor Bandung|*
|10005 |12000  |11000         |12400   |11000    |*Vendor Bandung|*

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

SQL


SELECT DATASET.`bandung`, 
   DATASET.`vendor bandung`, 
   DATASET.`jakarta`, 
   DATASET.`price min`, 
   ( CASE DATASET.`price min` 
       WHEN DATASET.`bandung` THEN "bandung" 
       WHEN DATASET.`vendor bandung` THEN "vendor bandung" 
       WHEN DATASET.`jakarta` THEN "jakarta" 
       ELSE "otrher" 
     end ) AS "Area" 
FROM (SELECT item_id, 
           Max(CASE 
                 WHEN `vendor_id` = 2 THEN price 
               end)   AS "Bandung", 
           Max(CASE 
                 WHEN `vendor_id` = 3 THEN price 
               end)   AS "Vendor Bandung", 
           Max(CASE 
                 WHEN `vendor_id` = 4 THEN price 
               end)   AS "Jakarta", 
           Min(price) AS "Price Min" 
    FROM   transactions 
    GROUP  BY item_id) DATASET 

Таблица


SELECT * FROM transactions;

enter image description here

Результат


enter image description here

0 голосов
/ 14 февраля 2020
WITH cte AS (
SELECT item_id, 
       MAX(CASE WHEN vendor_id = 2 
                THEN price 
                END) AS Bandung, 
       MAX(CASE WHEN vendor_id = 3 
                THEN price 
                END) AS `Vendor Bandung`, 
       MAX(CASE WHEN vendor_id = 4 
                THEN price 
                END) AS Jakarta, 
       MIN(price) MinPrice
FROM transactions 
GROUP BY item_id
)
SELECT *,
       CASE MinPrice WHEN Bandung THEN 'Bandung'
                     WHEN `Vendor Bandung` THEN 'Vendor Bandung'
                     WHEN Jakarta THEN 'Jakarta'
                     ELSE 'unknown'
                     END Area
FROM cte

Для древних версий:

SELECT *,
       CASE MinPrice WHEN Bandung THEN 'Bandung'
                     WHEN `Vendor Bandung` THEN 'Vendor Bandung'
                     WHEN Jakarta THEN 'Jakarta'
                     ELSE 'unknown'
                     END Area
FROM 
(
SELECT item_id, 
       MAX(CASE WHEN vendor_id = 2 
                THEN price 
                END) AS Bandung, 
       MAX(CASE WHEN vendor_id = 3 
                THEN price 
                END) AS `Vendor Bandung`, 
       MAX(CASE WHEN vendor_id = 4 
                THEN price 
                END) AS Jakarta, 
       MIN(price) MinPrice
FROM transactions 
GROUP BY item_id
) cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...