的最大值行我有一個表,看起來像這樣:SQL:對於每一個COLUMN1發現它與列2
我想每個ID是在反饋的最大值的行。所以我預期的結果應該是這樣的:
我試着這樣做:
SELECT id, course_number, rate_average, max(feedbacks)
FROM [Table]
GROUP BY id;
而且我得到每個ID一行但該行不包含原始表格中右列的數據。
哦,我正在使用mysql。
的最大值行我有一個表,看起來像這樣:SQL:對於每一個COLUMN1發現它與列2
我想每個ID是在反饋的最大值的行。所以我預期的結果應該是這樣的:
我試着這樣做:
SELECT id, course_number, rate_average, max(feedbacks)
FROM [Table]
GROUP BY id;
而且我得到每個ID一行但該行不包含原始表格中右列的數據。
哦,我正在使用mysql。
試試這個:
select t.*
from your_table t
inner join (
select
id, max(feedbacks) feedbacks
from your_table
group by id
) t2 on t.id = t2.id and t.feedbacks = t2.feedbacks;
它發現ID和最大的反饋,並與原表加入它來獲得相關的行。
請注意,如果有多個具有相同ID和反饋的行,則將返回所有這些行。
如果你想每個ID一行,那麼認爲「過濾」,而不是「聚合」。一種方法是相關子查詢:
select t.*
from t
where t.feedbacks = (select max(t2.feedbacks)
from t t2
where t2.id = t.id
);
注意:如果多行具有相同的最大值,那麼這將返回所有行的ID。如果這是一個問題,你應該問另一個問題,並指定你想在這種情況下返回。
您也可以通過在id
列的順序上按feedbacks
列的降序添加行號組來實現此目的。
查詢
select t1.``id`, t1.`course_number`, t1.`rate_average`, t1.`feedbacks` from
(
select `id`, `course_number`, `rate_average`, `feedbacks`,
(
case `id` when @curA
then @curRow := @curRow + 1
else @curRow := 1 and @curA := `id` end
) as `rn`
from `your_table_name` t,
(select @curRow := 0, @curA := '') r
order by `id`, `feedbacks` desc
)t1
where t1.`rn` = 1;
MySQL或SQL服務器? – GurV
@GurV我刪除了SQL Server標記 – Lamak