我试图在MySQL中根据IF类型语句创建一个查询,但我不确定如何编写脚本。 我是MySQL和数据库查询的新手,所以如果惯例规定这种类型的查询是在上游创建的,那么就说。
对于上下文,我有4个字段:
ID, YEAR, SYSTEM, MEASURE
我想确定ID
和YEAR = '2015'
之间的差异大于YEAR = '2014'
的所有500
。
我不确定您是通过IF语句在WHERE子句中执行此操作,还是使用两个SELECT语句。
我没有被要求在
之前对数据库进行如此复杂的查询答案 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值检查。