Mysql 比较行SQL计数值的差异
我有一张桌子:Mysql 比较行SQL计数值的差异,mysql,sql,Mysql,Sql,我有一张桌子: id firstval secondval 1 4 5 2 5 4 3 3 3 4 6 6 5 7 8 6 9 8 7 3 3 8 3 3 我需要做的第一
id firstval secondval
1 4 5
2 5 4
3 3 3
4 6 6
5 7 8
6 9 8
7 3 3
8 3 3
我需要做的第一件事是计算secondval>firstval的次数。这显然没有问题
然而,我正在努力解决的问题是如何计算secondval>firstval的每个实例的下一行满足条件secondvalSELECT id, @prevGreater AND secondval < firstval AS discrepancy,
@prevGreater := secondval > firstval AS secondGreater
FROM (SELECT * FROM YourTable ORDER BY id) AS x
CROSS JOIN (SELECT @prevGreater := false) AS init
现在,您可以根据需要使用COUNT语句:
DECLARE @YourTable TABLE
(id int, firstval int, secondval int)
INSERT INTO @YourTable
SELECT 1, 4, 5
UNION ALL
SELECT 2, 5, 4
UNION ALL
SELECT 3, 3, 3
UNION ALL
SELECT 4, 6, 6
UNION ALL
SELECT 5, 7, 8
UNION ALL
SELECT 6, 9, 8
UNION ALL
SELECT 7, 3, 3
UNION ALL
SELECT 8, 3, 3
SELECT ID
,CASE
WHEN SECONDVAL>FIRSTVAL THEN 0
WHEN FIRSTVAL>SECONDVAL THEN 1
ELSE 0
END AS DISCREPANCY
,CASE
WHEN SECONDVAL>FIRSTVAL THEN 1
WHEN FIRSTVAL>SECONDVAL THEN 0
ELSE 0
END AS SECONDGREATER
FROM @YourTable
你可以试试这个。谢谢。我将其初始化为false,否则第一行可能会被视为不一致,即使没有上一行可比较。这可能更有意义,是的。如果ID号中存在差异,该怎么办?此查询如何比较连续行?看看这把小提琴,它在第8行报告了一个不一致的地方,而它本不应该这样。
DECLARE @YourTable TABLE
(id int, firstval int, secondval int)
INSERT INTO @YourTable
SELECT 1, 4, 5
UNION ALL
SELECT 2, 5, 4
UNION ALL
SELECT 3, 3, 3
UNION ALL
SELECT 4, 6, 6
UNION ALL
SELECT 5, 7, 8
UNION ALL
SELECT 6, 9, 8
UNION ALL
SELECT 7, 3, 3
UNION ALL
SELECT 8, 3, 3
SELECT ID
,CASE
WHEN SECONDVAL>FIRSTVAL THEN 0
WHEN FIRSTVAL>SECONDVAL THEN 1
ELSE 0
END AS DISCREPANCY
,CASE
WHEN SECONDVAL>FIRSTVAL THEN 1
WHEN FIRSTVAL>SECONDVAL THEN 0
ELSE 0
END AS SECONDGREATER
FROM @YourTable