MySQL - группировка по одному столбцу и получение наименьшего значения - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь вернуть наименьшее значение для каждого набора данных, сгруппированных по столбцу.

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

Я нашел похожий пример (моя попытка с ним ниже) в MySQL Group By столбец заголовка get с наименьшим значением даты


SELECT t1 . * FROM tbl_TravelFeed AS t1
    INNER JOIN
    (SELECT pk_id, MIN( perperson ) AS perperson FROM tbl_TravelFeed
        GROUP BY accommodation
        ORDER BY perperson) AS t2    
   ON t1.pk_id = t2.pk_id AND t1.perperson = t2.perperson

Это, кажется, почти работает, но возвращает личность с наименьшим идентификатором вместо личности. Я не могу понять, почему я могу это исправить.

Я пытаюсь закончить университетское задание на вторник (27 марта '12 г.) и хотел бы, чтобы это работало должным образом, но это не критично для общей картины.

Я пробовал много способов сделать это, включая использование Distinct. Вышеупомянутый запрос, похоже, ближе всего к нему.

Буду очень признателен за любую помощь.

Aaron

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Это не проверено, но именно так я бы написал в MySQL, поэтому я поместил свой подзапрос в оператор WHERE, чтобы я мог легко создать VIEW из этого запроса и всегда хранить результаты в отдельном представлениитак что я мог бы делать запросы против этого.

SELECT * FROM tbl_Travelfeed AS t
WHERE perperson =
(
  SELECT MIN(perperson)
  FROM tbl_Travelfeed
  WHERE accommodation = t.accommodation
)
0 голосов
/ 24 марта 2012
SELECT t.* 
FROM 
        tbl_TravelFeed AS t
    INNER JOIN
        ( SELECT accommodation
               , MIN(perperson) AS perperson 
          FROM tbl_TravelFeed
          GROUP BY accommodation
        ) AS g 
      ON  g.accommodation = t.accommodation
      AND g.perperson = t.perperson  
0 голосов
/ 23 марта 2012

Ты очень близко.Поскольку вы группируете по месту размещения, соответствующая ссылка из внутренней таблицы и внешней таблицы - это поле accommodation, а не pk_id:

(SELECT accommodation, MIN( perperson ) AS perperson FROM tbl_TravelFeed
    GROUP BY accommodation
    ORDER BY perperson) AS t2
ON t1.**accommodation** = t2.**accommodation** AND t1.perperson = t2.perperson
...