MySQL запрос наименьшая сумма опций - PullRequest
0 голосов
/ 12 июня 2018

У меня запрос, возвращающий следующее:

ID | Price
---------------
1 | 20
1 | 30
1 | 15
2 | 10
2 | 12
2 | 20
3 | 1
3 | 0
3 | 0
4 | 0
4 | 0 
4 | 7

Мне интересно, есть ли способ получить сумму наименьшего значения для каждого идентификатора.Так что в этом случае он вернет 25. 15 + 10 + 0 + 0

Ответы [ 6 ]

0 голосов
/ 12 июня 2018

Я бы использовал соотношение subquery:

select sum(t.price) as overallprice
from table t
where price = (select min(price) from table t1 where t1.id = t.id);
0 голосов
/ 12 июня 2018

Некоторые другие подходы заключаются в использовании пользовательских переменных MySQL или самостоятельном левом соединении.

Решение пользовательских переменных MySQL

Запрос

SELECT 
 SUM(prices.Price)
FROM ( 
  SELECT 
     prices.Price
   , CASE 
       WHEN @id != prices.id    
       THEN 1
       ELSE 0 
     END AS isMinGroupValue
   , (@id := prices.id)    
  FROM 
    prices 
  CROSS JOIN (
    SELECT 
      @id := 0
   ) AS init_user_params
  ORDER BY
     prices.ID ASC
   , prices.price ASC 
) AS prices
WHERE
  prices.isMinGroupValue = 1 

см. Демонстрацию https://www.db -fiddle.com / f / nzWqMQAxd7mvq589R7WuZ8 / 0

Самостоятельное решение для левого соединения

Запрос

SELECT 
 SUM(prices1.Price)
FROM 
 prices prices1
LEFT JOIN
 prices prices2
ON
   prices1.ID = prices2.ID
 AND
   prices1.price > prices2.price
WHERE
 prices2.ID IS NULL

см. Демонстрацию https://www.db -fiddle.com / f / nzWqMQAxd7mvq589R7WuZ8 / 1

0 голосов
/ 12 июня 2018

Другой подход, использующий раздел без использования оператора group by

select sum(price.min_price) from 
(select distinct id,min(price) over(partition by id) as min_price from prices) price
0 голосов
/ 12 июня 2018

Вы можете сделать запрос, как показано ниже

 Select sum (a) from
  (
     Select min (price) as a from yourtable
    Group by id
 ) t
0 голосов
/ 12 июня 2018

Вы можете создать подзапрос, который найдет наименьшую цену за идентификатор, возьмет результаты этого и суммирует их вместе.В псевдокоде:

select
  sum(lowest_price)
from (select id, min(price) as lowest_price from prices group by id) lowest_prices
0 голосов
/ 12 июня 2018

Вы можете использовать подзапрос, выбирая цену min для каждого идентификатора, затем sum эти значения:

select sum(minprice) as overallprice
from (
    select min(price) minprice
    from yourtable
    group by id) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...