在mysql中,我可以计算满足某个条件的行数吗?如果不满足,则退出计算?
基本上我在MySql 5.5中存储数据。我使用qt连接到mysql。我想比较两列,如果col1大于col2,则计数继续,但当col1小于col2时,计数结束并退出。这是为了计算在某种条件下,在列的开头有多少行。在mysql中可能吗 例如: Col1 Col2 2.1 2 3 2.1 我需要的计数应该返回1,因为第一行满足Col1>Col2的条件,但第二行不满足。当条件不满足时,无论后续行是否满足条件,计数都将退出在mysql中,我可以计算满足某个条件的行数吗?如果不满足,则退出计算?,mysql,Mysql,基本上我在MySql 5.5中存储数据。我使用qt连接到mysql。我想比较两列,如果col1大于col2,则计数继续,但当col1小于col2时,计数结束并退出。这是为了计算在某种条件下,在列的开头有多少行。在mysql中可能吗 例如: Col1 Col2 2.1 2 3 2.1 我需要的计数应该返回1,因为第一行满足Col1>Col2的条件,但第二行不满足。当条件不满足时,无论后续行是否满足条件,计数都将退出 SELECT COUNT(*) FROM table WHERE col1
SELECT COUNT(*)
FROM table
WHERE col1 > col2
很难理解您想要的是什么,但是COUNT*将返回与您的条件匹配的行数,如果您愿意的话。如果不是,你能更具体一点或者举例说明你的目标吗?我将根据其他细节尽力更正我的答案
很难理解您想要的是什么,但是COUNT*将返回与您的条件匹配的行数,如果您愿意的话。如果不是,你能更具体一点或者举例说明你的目标吗?我会根据其他细节尽力更正我的答案。这有点难看,但可以完成。它需要根据任何顺序等进行调整,你想应用到某个表上,但原则是合理的
SELECT COUNT(*)
FROM (
SELECT
@multiplier:=@multiplier*IF(t.`col1`<t.`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
) scanQuery
@multiplier变量将继续将自身乘以1。当它遇到col1SELECT
`someTable`.*
FROM `someTable`
INNER JOIN (
SELECT
`someTable`.`PrimaryKeyField`
@multiplier:=@multiplier*IF(`col1`<`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
) t
ON scanQuery.`PrimaryKeyField` = `someTable`.`PrimaryKeyField`
或者可能只是
SELECT
`someTable`.*
@multiplier:=@multiplier*IF(`col1`<`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
这有点难看,但可以胜任。它需要根据任何顺序等进行调整,你想应用到某个表上,但原则是合理的
SELECT COUNT(*)
FROM (
SELECT
@multiplier:=@multiplier*IF(t.`col1`<t.`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
) scanQuery
@multiplier变量将继续将自身乘以1。当它遇到col1SELECT
`someTable`.*
FROM `someTable`
INNER JOIN (
SELECT
`someTable`.`PrimaryKeyField`
@multiplier:=@multiplier*IF(`col1`<`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
) t
ON scanQuery.`PrimaryKeyField` = `someTable`.`PrimaryKeyField`
或者可能只是
SELECT
`someTable`.*
@multiplier:=@multiplier*IF(`col1`<`col2`,0,1) AS counter
FROM `someTable` t, (SELECT @multiplier := 1) v
HAVING counter = 1
您不应该为此使用SQL;您得到的任何答案都将充满压缩,例如,如果由于创建或更改索引,初始查询的结果集以不同的顺序返回,那么它们将失败 SQL是为基于集合的逻辑而设计的,而您真正追求的是过程逻辑。如果你必须这样做,那么 1使用光标 2使用ORDERBY语句
3个交叉手指您不应该为此使用SQL;您得到的任何答案都将充满压缩,例如,如果由于创建或更改索引,初始查询的结果集以不同的顺序返回,那么它们将失败 SQL是为基于集合的逻辑而设计的,而您真正追求的是过程逻辑。如果你必须这样做,那么 1使用光标 2使用ORDERBY语句
3十指交叉你想施加什么条件之王?就像我说的,col1>Col2如果你能提供关于表结构的信息,最好是你已经尝试过的信息/样本数据,那么我相信你会得到更好的答案你想施加什么条件之王?就像我说的,col1>col2如果您可以提供有关表结构的信息,最好是您已经尝试过的内容/示例数据,那么我相信您会得到更好的答案如果col1