SELECT 
  vi_product_prices.product_id, 
  MIN(
    IF(
      vi_product_prices.percentage_discount = 0, 
      vi_product_prices.price, 
      vi_product_prices.price - (
        vi_product_prices.price * vi_product_prices.percentage_discount
      )/ 100
    )
  ) AS price 
FROM 
  vi_product_prices 
WHERE 
  vi_product_prices.product_id IN (
    148, 180, 18, 16, 4, 5, 23, 24, 1, 22, 149, 
    227, 190, 189, 245, 238, 239, 242
  ) 
  AND vi_product_prices.lower_limit = 1 
  AND vi_product_prices.usergroup_id IN (0, 1) 
GROUP BY 
  vi_product_prices.product_id

Query time 0.00039

JSON explain

{
  "query_block": {
    "select_id": 1,
    "filesort": {
      "sort_key": "vi_product_prices.product_id",
      "temporary_table": {
        "nested_loop": [
          {
            "table": {
              "table_name": "vi_product_prices",
              "access_type": "ref",
              "possible_keys": [
                "usergroup",
                "product_id",
                "lower_limit",
                "usergroup_id"
              ],
              "key": "lower_limit",
              "key_length": "3",
              "used_key_parts": ["lower_limit"],
              "ref": ["const"],
              "rows": 255,
              "filtered": 100,
              "attached_condition": "vi_product_prices.lower_limit <=> 1 and vi_product_prices.product_id in (148,180,18,16,4,5,23,24,1,22,149,227,190,189,245,238,239,242) and vi_product_prices.usergroup_id in (0,1)"
            }
          }
        ]
      }
    }
  }
}

Result

product_id price
1 5399.99000000
4 699.99000000
5 899.99000000
16 349.99000000
18 299.99000000
22 799.99000000
23 599.99000000
24 449.99000000
148 130.00000000
149 53.99000000
180 199.99000000
189 1.00000000
190 899.95000000
227 699.00000000
238 499.99000000
239 509.99000000
242 249.00000000
245 699.00000000