我有以下costs
表:
+--------+------+-----------+
| Year | ID | Amount |
+--------+------+-----------+
| 1960 | 1 | 100 |
| 1960 | 2 | 200 |
| 1960 | 3 | 200 |
| 1960 | 4 | 150 |
| 1961 | 1 | 300 |
| 1961 | 2 | 200 |
| 1961 | 3 | 100 |
| 1961 | 4 | 300 |
+---------+------+----------+
我希望所有ID都按年份获得最大金额。例如,对于1960年,我想要ID为#2和3的行。对于1961年,我想要ID为#1和4的行。
SELECT Year, ID, Amount FROM costs WHERE Amount = (SELECT MAX(Amount) FROM costs);
上面给出了所有年份的所有MAX值。但我想要一个条件,只能得到每年的最大金额值。如何添加条件以仅选择年份= 1960的记录?
答案 0 :(得分:2)
试试这个....它应该有用
SELECT
*
FROM
costs
WHERE
(YEAR, amount) IN (
SELECT
YEAR,
max(amount)
FROM
costs
GROUP BY
YEAR
);
答案 1 :(得分:2)
请用以下查询试试。这是经过测试的。工作正常。
点击以下链接,您可以在实时中看到您想要的预期结果。
SELECT
t1.*
FROM
costs t1
WHERE
t1.amount = (
SELECT
MAX(t2.amount)
FROM
costs t2
WHERE
t2. `year` = t1. `year`
);
答案 2 :(得分:1)
应该在所有主要数据库上运行的一个选项是使用子查询来查找每年的最大金额以选择所需的记录:
SELECT c1.*
FROM costs c1
INNER JOIN
(
SELECT Year, MAX(Amount) AS MaxAmount
FROM costs
GROUP BY Year
) c2
ON c1.Year = c2.Year AND
c1.Amount = c2.MaxAmount
另一种方法是使用相关的子查询:
SELECT c1.*
FROM costs c1
WHERE c1.Amount = (SELECT MAX(c2.Amount) FROM costs c2 WHERE c2.Year = c1.Year)
我希望加入(第一个选项)对于较大的表来说是最快的方法,特别是如果你有合适的索引可以使用。
答案 3 :(得分:0)
NULL