我有一个用户数据库,根据用户的类型为用户分配一定范围内的ID号。例如,董事会成员获得1到100之间的ID,孩子获得1001到3000之间的ID,父母获得3001到7000之间的ID等。*
我希望得到每个"段"中使用的最高号码列表。我的身份证。
我当然可以通过
获得最多的数字SELECT MAX(Persons.Number) as Maximum FROM Persons
并获得3000以下的最高数字:
SELECT MAX(Persons.Number) as MaxChild FROM Persons WHERE Persons.Number<=3000
...但是,我怎样才能获得100以下的最高数字和1000以下的最高数字以及3000以下的最高数字等等?{/ p>
*我确实将这些特征存储在其他地方的数据库中; &#34; bucketing&#34; ID号码只是为了让乍看之下更容易发现某个用户所属的地方
答案 0 :(得分:2)
只需使用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;
答案 1 :(得分:1)
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