Вы можете использовать следующее решение, используя GROUP BY
с MAX
:
SELECT id, IFNULL(maxTemp, maxOther) AS maxPrice
FROM (
SELECT id,
MAX(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) maxTemp,
MAX(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) maxOther
FROM table_name
GROUP BY id
)t;
Это решение должно дать вам правильные результаты для ваших требований (ORDER BY ... DESC LIMIT 1
).
Но вы также можете использовать другие агрегатные функции , чтобы получить SUM
или список (используя GROUP_CONCAT
) значений цен.
Решение для получения SUM
значений цен:
SELECT id, IFNULL(sumTemp, sumOther) AS sumPrice
FROM (
SELECT id,
SUM(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) sumTemp,
SUM(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) sumOther
FROM table_name
GROUP BY id
)t;
... или получить список значений цен с помощью функции GROUP_CONCAT
:
SELECT id, IFNULL(gTemp, gOther) AS listPrice
FROM (
SELECT id,
GROUP_CONCAT(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) gTemp,
GROUP_CONCAT(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) gOther
FROM table_name
GROUP BY id
)t;
demoна dbfiddle.uk