SELECT 
  cscart_product_prices.product_id, 
  MIN(
    IF(
      cscart_product_prices.percentage_discount = 0, 
      cscart_product_prices.price, 
      cscart_product_prices.price - (
        cscart_product_prices.price * cscart_product_prices.percentage_discount
      )/ 100
    )
  ) AS price 
FROM 
  cscart_product_prices 
WHERE 
  cscart_product_prices.product_id IN (
    321, 320, 319, 318, 317, 316, 315, 314, 
    313, 312, 311, 310, 309, 308, 307, 306, 
    305, 304, 303, 302
  ) 
  AND cscart_product_prices.lower_limit = 1 
  AND cscart_product_prices.usergroup_id IN (0, 1) 
GROUP BY 
  cscart_product_prices.product_id

Query time 0.00033

JSON explain

{
  "query_block": {
    "select_id": 1,
    "filesort": {
      "sort_key": "cscart_product_prices.product_id",
      "temporary_table": {
        "nested_loop": [
          {
            "table": {
              "table_name": "cscart_product_prices",
              "access_type": "ALL",
              "possible_keys": [
                "usergroup",
                "product_id",
                "lower_limit",
                "usergroup_id"
              ],
              "rows": 76,
              "filtered": 26.31579018,
              "attached_condition": "cscart_product_prices.lower_limit = 1 and cscart_product_prices.product_id in (321,320,319,318,317,316,315,314,313,312,311,310,309,308,307,306,305,304,303,302) and cscart_product_prices.usergroup_id in (0,1)"
            }
          }
        ]
      }
    }
  }
}

Result

product_id price
302 250000.00000000
303 473000.00000000
304 420000.00000000
305 420000.00000000
306 171000.00000000
307 173000.00000000
308 160000.00000000
309 171000.00000000
310 405000.00000000
311 778000.00000000
312 291000.00000000
313 546000.00000000
314 278000.00000000
315 539000.00000000
316 278000.00000000
317 539000.00000000
318 260000.00000000
319 500000.00000000
320 332000.00000000
321 332000.00000000