【问题标题】:SQL IF statement with a print带有打印的 SQL IF 语句
【发布时间】:2017-08-08 02:35:06
【问题描述】:

我做错了什么?如果单身人数多于已婚人数,则需要显示“是”,反之则显示“否”。我只希望它显示是或否。

IF
select COUNT(StudMaritalStatus) from students WHERE StudMaritalStatus = "M"
<
select COUNT(StudMaritalStatus) from students WHERE StudMaritalStatus = "S"
Print 'Yes'
ELSE
Print 'No';

【问题讨论】:

  • 为了澄清我得到的错误说我使用了错误的 IF 语句语法。
  • 请发表语法错误声明。
  • IF右边的错误1064
  • 您做错的一件事是 count(something) 返回一个数字,并且您将它与字母 M 或 S 进行比较。

标签: mysql sql


【解决方案1】:

你想要这样的东西:

select case when married >= single then 'M' else 'S' end
from 
(
select sum(case when StudMaritalStatus = 'M' then 1 else 0 end) married
, sum (case when StudMaritalStatus = 'S' then 1 else 0 end) single
from students
) derivedTable

平局取决于您的业务需求,我们都不知道。

【讨论】:

    【解决方案2】:

    考虑到 MySQL 使用:

     IF expression THEN
          expression        
        ELSE
     ENDIF;
    

    最好不要使用 select 语句

    DECLARE married int, single int
    
    SET married = select COUNT(StudMaritalStatus) from students WHERE StudMaritalStatus = 'M'
    
    SET single = select COUNT(StudMaritalStatus) from students WHERE StudMaritalStatus = 'S'
    
    IF married < single THEN 
      PRINT 'YES'
    ELSE 
      PRINT 'NO'
    END IF
    

    回答是,您的语法错误 https://dev.mysql.com/doc/refman/5.7/en/if.html

    【讨论】:

    • 不是最优雅的解决方案,但它向他展示了他的语法错误以及如何纠正它。 @Dan 您的解决方案经过优化,可以最大限度地减少数据库调用。首先从简单到复杂 :)