Предложение MYSQL GROUP BY с добавлением столбца, отличного от GROUP BY - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть таблица в MySQL, и я хочу сделать группу по операции. Так вот мой столик

enter image description here

Ожидаемый результат должен быть суммой ценовой группы по bag_no, но product_id должен быть mainproduct = 'Y'. Таким образом, результат должен быть таким

enter image description here

Я могу сделать следующее

SELECT bag_no, sum(price) AS total_price 
FROM myTable
GROUP BY bag_no

Но это не позволит мне добавить product_id в таблицу, которую я тоже хочу. Как мы можем сделать это?

1 Ответ

0 голосов
/ 15 ноября 2018

Один канонический способ сделать это включает присоединение к подзапросу, который находит суммы:

SELECT
    t1.bag_no,
    t1.product_id,
    t2.total_price
FROM myTable t1
INNER JOIN
(
    SELECT bag_no, SUM(price) AS total_price
    FROM myTable
    GROUP BY bag_no
) t2
    ON t1.bag_no = t2.bag_no
WHERE
    t1.mainproduct = 'Y';

С MySQL 8+, который поддерживает аналитические функции, мы можем немного упростить вышеуказанный запрос:

WITH cte AS (
    SELECT
        t1.bag_no,
        t1.product_id,
        SUM(price) OVER (PARTITION BY t1.bag_no) total_price,
        t1.mainproduct
    FROM myTable t1
)

SELECT bag_no, product_id, total_price
FROM cte
WHERE mainproduct = 'Y';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...