MYSQL中的IF类型stement

时间:2016-09-12 11:07:47

标签: mysql if-statement

我试图在MySQL中根据IF类型语句创建一个查询,但我不确定如何编写脚本。 我是MySQL和数据库查询的新手,所以如果惯例规定这种类型的查询是在上游创建的,那么就说。

对于上下文,我有4个字段:

ID, YEAR, SYSTEM, MEASURE

我想确定IDYEAR = '2015'之间的差异大于YEAR = '2014'的所有500

我不确定您是通过IF语句在WHERE子句中执行此操作,还是使用两个SELECT语句。

我没有被要求在

之前对数据库进行如此复杂的查询

3 个答案:

答案 0 :(得分:1)

SELECT a.id_farm, a.id_year, a.measure > b.measure + 500 AS test
FROM t1 AS a
INNER JOIN(
        SELECT id_farm, measure
        FROM t1
        WHERE id_year = 2014) AS b
ON a.id_farm = b.id_farm
WHERE id_year = 2015
HAVING test = 1

我没有遇到过HAVING,但在弄清楚如何编写它之后,现在看起来很简单!

答案 1 :(得分:0)

SQL(MySQL和其他系统)基本上适用于多组行。所以,让我猜一下,并尝试根据这些集重新制定你的要求。

"我希望2015年的ID值集合比2014年的最大值大500多。"

要翻译集合的规范,请执行此SQL

       SELECT ID
         FROM table
        WHERE YEAR = '2015'
          AND ID > (SELECT MAX(ID) FROM table WHERE YEAR='2014')

说明:

这只选择每个匹配行的ID值。您将获得每行中带有ID的结果集。

       SELECT ID

这会将表格命名为您的集合的起点。

         FROM table

这会过滤掉除2015以外的任何年份的所有行

        WHERE YEAR = '2015'

这是诀窍。它运行另一个选择语句,以查找2014年表中最大的ID值。然后,它会过滤您的2015 ID值,以便仅选择值大于500且大于2014年的值。< / p>

          AND ID > (SELECT MAX(ID) FROM table WHERE YEAR='2014')

现在,我可能已经猜到了你想要的东西。但我希望这个讨论可以帮助您思考用SQL处理规范的位置。

答案 2 :(得分:0)

我认为您不是指ID差异,而是2014年至2015年特定系统的衡量标准。如果这是准确的,您可以执行类似2015年的主要查询标准,并为2014年加入相同的系统和测量差异。

select
      T1.ID,
      T1.Year,
      T1.System,
      T1.Measure,
      T2.Measure as Measure2014,
      T1.Measure - T2.Measure as MeasureDifference
   from
      YourTable T1
         JOIN YourTable T2
            on T1.System = T2.System
           AND T2.Year = 2014
           AND T1.Measure - T2.Measure > 500
   where
      T1.Year = 2015

不确定您的测量值,但您可能需要对差异应用ABSOLUTE值检查。