列:numberIWant,value
我想获得numberIWant
个最有价值的记录。
select max(value) from myTable
仅返回最大值。
我想找到numberIWant
有这个' max'值。怎么做?
答案 0 :(得分:1)
使用GROUP_CONCAT
,如下所示:
SELECT
MAX(value),
SUBSTRING_INDEX(
GROUP_CONCAT(numberIWant ORDER BY value DESC),
',', 1
)
FROM
my_table
很多此类查询实际上并不需要自我加入,只需要一个SELECT
即可满足。
答案 1 :(得分:0)
下面的SQL中显示了一种可能更简单的Rolando方法。至于哪个更好很难说,因为表现可能会根据您的具体情况而有所不同。根据表的大小,性能会根据您的PRIMARY KEY和索引而有所不同。我无法使用真实的数据集进行测试,因此该领域的任何测试都取决于您。
如果值(我称之为myvalue)是UNIQUE(而非NULL),那么你不需要输入IN而just =将会这样做。这应该更高效。如果myvalue是PRIMARY KEY,它应该更快。
顺便说一句,欢迎来到论坛!下次,你能给我们DDL(CREATE TABLE blah(col1 col1_type,col2 ...)和一些DML(INSERT INTO blah VALUES(col1_value,col2_value ...);)。这使那些试图帮助你的人更容易为我们的答案创建测试用例。此论坛是一个很好的资源,所以请帮助我们帮助您查看有关如何提出重大问题的帖子here(及其中的链接)。
CREATE TABLE `numwant`
(
`numiwant` int(11) DEFAULT NULL,
`myvalue` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
mysql> SELECT * FROM numwant;
+----------+---------+
| numiwant | myvalue |
+----------+---------+
| 2 | 5 |
| 3 | 456 |
| 4 | 55 |
| 4 | 456 |
+----------+---------+
4 rows in set (0.00 sec)
mysql>
mysql> SELECT n.* FROM numwant n WHERE n.myvalue IN (SELECT MAX(myvalue) FROM numwant);
+----------+---------+
| numiwant | myvalue |
+----------+---------+
| 3 | 456 |
| 4 | 456 |
+----------+---------+
答案 2 :(得分:0)
Shlomi的工作。 Verace不适用于我的问题,在我的情况下我不能用'value'来找'numwant'
我发现了另一个(也很容易)答案:
SELECT numIWant
FROM myTable
ORDER BY value DESC
LIMIT 1
但我从未见过是否有人使用这样的声明,是错还是在某些情况下表现不佳?或者我每次都可以使用它吗?