如果另一列等于某个字符串,如何在SQL查询中选择最高列值


How do I select the highest column value in an SQL query IF another column is equal to a certain string

我试图建立一个匹配系统,选择两个不同查询的最高值。我在网站上看了其他答案,都没有帮助。我想比较的是:

我想从type等于的version列中获取最大值,例如"type1"。我还想从version列中获取最大值,其中type等于"type2"。然后我想将这些与PHP进行比较,并找出type2version是否高于type1version。我能做到吗?

编辑:这个问题已经被Brian Demilia回答了。主持人可以将其标记为已回答吗?

我相信这会达到你的目的:

select version, type
  from tbl
 where version =
       (select max(version) from tbl where type in ('type1', 'type2'))

如果max(version)与type1记录相关联,类型结果列将显示'type1',如果max(version)与type2记录相关联,则显示'type2'。

如果您想知道type1的最高版本和type2的最高版本(也就是说,您希望将值返回到输出中),并让查询确定哪个更高,您可以使用以下命令:

select t1.version as type1_max_version,
       t2.version as type2_max_version,
       case when t1.version > t2.version
            then t1.version
            else t2.version end as highest_version_num,
       case when t1.version > t2.version
            then 'type1'
            else 'type2' end as highest_version_type
  from tbl t1
 cross join tbl t2
 where t1.version = (select max(version) from tbl where type = 'type1')
   and t2.version = (select max(version) from tbl where type = 'type2')

根据您的评论,如果您只想过滤那些名为"usrips"的字段具有特定值的行,您可以使用以下命令。这还假设您希望将此过滤器应用于type1和type2行。如果不是这样,请告诉我。此外,如果您想在WHERE子句中添加额外的字段,您还需要将它们添加到t1和t2之间的JOIN子句中,否则您必须重复两次WHERE子句中的所有内容,一次用于t1,一次用于t2

select t1.version as type1_max_version,
       t2.version as type2_max_version,
       case when t1.version > t2.version
            then t1.version
            else t2.version end as highest_version_num,
       case when t1.version > t2.version
            then 'Firewall'
            else 'FBypass' end as highest_version_type
  from tbl t1
  join tbl t2 on t1.usrips = t2.usrips
 where t1.version = (select max(version) from tbl
                      where type = 'Firewall' and usrips LIKE '%1.1.1.1%')
   and t2.version = (select max(version) from tbl
                      where type = 'FBypass'  and usrips LIKE '%1.1.1.1%')
   and t1.usrips LIKE '%1.1.1.1%'

参见小提琴:http://sqlfiddle.com/#!2/2525a/7/0

这是你想要的吗?

select max(case when t.type = 'type1' then version end) as type1_maxversion
       max(case when t.type = 'type2' then version end)  as type2_maxversion
from table t;

可以在SQL中进行比较,最简单的方法是使用子查询:

select (case when type1_maxversion is null then 'No Type1'
             when type2_maxversion is null then 'No Type2'
             when type1_maxversion > type2_maxversion then 'Type1 Bigger'
             when type2_maxversion > type1_maxversion then 'Type2 Bigger'
             else 'equal'
        end) as comp
from (select max(case when t.type = 'type1' then version end) as type1_maxversion
             max(case when t.type = 'type2' then version end)  as type2_maxversion
      from table t
     ) x;