簡體   English   中英

如何查詢具有最低值的行,又如何知道最高值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM