[英]How to query row with lowest value, and also to know the value of the highest value?
考慮以下兩個查詢:
SELECT *, 'b' AS b FROM someTable ORDER BY a ASC LIMIT 1;
SELECT *, MAX(a) AS maxA FROM someTable ORDER BY a ASC LIMIT 1;
前一個查詢按預期返回的值為a
的最小值。 后一個查詢返回存儲在磁盤上的第一行(通常是主鍵值最低的行)。 我該如何解決? 我的目的是使列的整個行具有最低a
值(如果多於一個,我只需要一個,那無關緊要),此外,我確實需要最高年齡的值。 在理想情況下,我將運行兩個查詢,但是由於對象在此應用程序中的序列化方式,如果不重構很多我的代碼,我將無法做到這一點。 我實際上不介意MySQL引擎本身是否必須查詢兩次,重要的一點是輸出必須在一行中返回。 不幸的是,我無法為此查詢編寫存儲過程。 是的, *
運算符很重要,我無法列出所需的字段。 而且有太多的行不能全部歸還!
請注意,這個問題從表面上看與先前的問題相似,但是該問題存在形式不明確和模棱兩可的問題,因此所有答案都針對了不是我本意的問題(但很有用,我學到了很多東西,我很高興結果就是這樣)。 這個問題更清楚地問了預期的問題,因此應該吸引不同的答案。
為什么不運行這個:
SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable
不幸的是,MySQL不知道窗口函數。 因此,如果您真的想選擇*
以及最小值/最大值,那么我猜您將不得不采用JOIN:
SELECT * FROM
(
SELECT * FROM someTable ORDER BY a ASC LIMIT 1
) t1
CROSS JOIN
(
SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable
) t2
或對子選擇(如Imre L的答案所述)
在選擇部分中使用子查詢:
SELECT *, 'b' AS b,
(SELECT MAX(a) FROM someTable) AS maxA
FROM someTable ORDER BY a ASC LIMIT 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.