System
PostgreSQL 11.5 (Ubuntu 11.5-1.pgdg19.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 8.3.0-6ubuntu1) 8.3.0, 64-bit
Issue
Need return one max
value from table for every product_id
(1 product_id has 10 store_ids) based on available_count
.
Sql
select
product_id, store_id, max(available_count)
from
j_product_store_availability
group by
product_id,
store_id,
available_count
order by
product_id,
available_count desc,
store_id
--limit 1
Result
product_id store_id available_count
130475 4 7
130475 1 4
130475 8 4
130475 2 3
130475 5 3
130475 7 3
130475 10 3
130475 3 2
130475 6 2
130475 9 0
130479 1 0
130479 2 0
130479 3 0
...
It returns rows for every store_id
. Need to return just one max value based on available_count
.
Expected result
130475 4 7
130479 1 0
(next product_id)
...
Thanks.
Solution (Laurenz solution)
SELECT DISTINCT ON (product_id)
product_id,
store_id,
max(available_count)
from
j_product_store_availability
--where store_id = '7'
group by
product_id,
store_id,
available_count
ORDER by
product_id,
available_count desc;
available_count
from GROUP BY and ORDER BY clause?group by product_id
only, but it returnSQL Error [42803]
. TriedOVER (PARTITION BY ...)
, but not working too.max(available_count)
and don't addGROUP BY
. See: stackoverflow.com/a/7630564/939860