#mysql #sql
#mysql — сервер #sql
Вопрос:
CREATE TABLE operations (
id int auto_increment primary key,
time_stamp DATE,
product VARCHAR(255),
quantity INT
);
INSERT INTO operations
(time_stamp, product, quantity
)
VALUES
("2020-01-01", "Product_A", "600"),
("2020-01-01", "Product_B", "400"),
("2020-01-01", "Product_C", "700"),
("2020-03-15", "Product_A", "300"),
("2020-03-15", "Product_B", "500"),
("2020-03-15", "Product_C", "900"),
("2020-03-15", "Product_D", "150");
Ожидаемый результат:
Product 2020-01-01 2020-03-15
Product_A 600 300
Product_B 400 500
Product_C 700 900
Product_D 0 150
В приведенном выше результате я хочу распределить quantity
per time_stamp
в двух разных столбцах.
Для этого я использую приведенный ниже запрос:
SELECT
product,
SUM(CASE WHEN time_stamp = '2020-01-01' THEN quantity ELSE 0 END) AS time_stamp_01,
SUM(CASE WHEN time_stamp = '2020-03-15' THEN quantity ELSE 0 END) AS time_stamp_02
FROM operations
GROUP BY 1;
Как вы можете видеть в запросе, столбцы называются time_stamp_01
и time_stamp_02
.
Однако я хочу, чтобы использовалась дата 2020-01-01
и 2020-03-15
.
Что мне нужно изменить в запросе для достижения этого?
ПРИМЕЧАНИЕ: в таблице всегда будет только два time_stamps
.
Ответ №1:
Если у вас есть фиксированные даты, вы можете использовать их в качестве имен столбцов, но их нужно экранировать:
SELECT product,
SUM(CASE WHEN time_stamp = '2020-01-01' THEN quantity ELSE 0 END) AS `2020-01-01`,
SUM(CASE WHEN time_stamp = '2020-03-15' THEN quantity ELSE 0 END) AS `2020-03-15`
FROM operations
GROUP BY 1;
Если вы хотите извлечь значения из таблицы, тогда вам нужно использовать динамический SQL.