簡體   English   中英

從同一列中選擇多個最大值

[英]Select multiple maximum values from the same column

我有一個用戶數據庫,根據用戶的類型為用戶分配一定范圍內的ID號。 例如,董事會成員獲得1到100之間的ID,孩子獲得1001到3000之間的ID,父母獲得300到7000之間的ID等。*

我想得到一份我ID的每個“段”使用的最高號碼列表。

我當然可以做到最多

SELECT MAX(Persons.Number) as Maximum FROM Persons

並獲得3000以下的最高數字:

SELECT MAX(Persons.Number) as MaxChild FROM Persons WHERE Persons.Number<=3000

...但是如何使用單個SELECT語句獲得100以下的最高數字和1000以下的最高數字以及3000以下的最高數字等?


*我確實將這些特征存儲在其他地方的數據庫中; ID號碼的“分組”只是為了讓乍一看更容易發現某個用戶所屬的位置

只需使用IF()

SELECT 
MAX(IF(Persons.Number BETWEEN x AND y, Persons.Number, NULL)) AS max_range_x_y, 
MAX(IF(Persons.Number BETWEEN i AND j, Persons.Number, NULL)) AS max_range_i_j, ...
FROM Persons;

以上是MySQL語法。 在SQL Server中,您可以使用IIF()代替。 什么應該在每個RDBMS中工作(因為它是ANSI-SQL標准)

SELECT 
MAX(CASE WHEN Persons.Number BETWEEN x AND y THEN Persons.Number ELSE NULL END) AS max_range_x_y, 
MAX(CASE WHEN Persons.Number BETWEEN i AND j THEN Persons.Number ELSE NULL END) AS max_range_i_j, ...
FROM Persons;
SELECT 
MAX(CASE WHEN id BETWEEN 1 and 100 THEN Number ELSE NULL END) as BoardMax,
MAX(CASE WHEN ID BETWEEN 1001 and 3000 THEN Number ELSE null END) as ChildMax,
MAX(CASE WHEN ID BETWEEN 3001 and 7000 THEN Number ELSE null END) as ParentMax
from 
Persons

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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