获得大于零的最小值

 一腕儿本人 发布于 2023-02-13 19:40

我有下表:

column1   column2   column3
   3         2         0
   5         9         2
   1         4         6

当我运行以下代码时:

SELECT
  id_function = @param,
  MIN(t1.column1) AS c1min, 
  MAX(t1.column2) AS c2max,
  MIN(t1.column3) AS c3min
FROM
  table1 (NOLOCK) AS t1
WHERE
  t1.id = @param

我明白了:

c1min   c2max   c3min
  1       9       0

我的问题是c3min必须是大于零的最小值.我需要的结果应该是:

c1min   c2max   c3min
  1       9       2

没有使用subselect有没有办法做到这一点?任何帮助将不胜感激.

谢谢!

2 个回答
  • 我建议使用nullif(),以便您的查询

    SELECT id_function = @param,
       MIN(t1.column1) AS c1min, 
       MAX(t1.column2) AS c2max,
       MIN(NULLIF(t1.column3,0) AS c3min
    FROM table1 (NOLOCK) AS t1
    WHERE t1.id = @param
    

    这样你就不会冒险改变你的结果,例如,如果第3列中的真实最小值为100,则前一个答案会影响你的结果,如果你的第3栏中只有零,那么之前的答案也会产生不正确的结果

    2023-02-13 19:44 回答
  • 你可以使用case所设置的0值在您的较高值min()条件

    SELECT id_function = @param,
           MIN(t1.column1) AS c1min, 
           MAX(t1.column2) AS c2max,
           MIN(case when t1.column3 = 0 then 99 else t1.column3 end) AS c3min
    FROM table1 (NOLOCK) AS t1
    WHERE t1.id = @param
    

    2023-02-13 19:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有