如何从MySQL中找到只有部分字段满足条件的记录?

如何从MySQL中找到只有部分字段满足条件的记录?,mysql,Mysql,我是MySQL的新手,我被困在以下问题上。 我有一个表,其中有3个数值字段。我叫它们A、B和C。 我想找到至少有两个大于60的值的记录。 解决这个问题的一个方法是 SELEC * FROM table WHERE (A>60 AND B>60) OR (A>60 AND C>60) OR (B>60 AND C>60) OR (A>60 AND B>60 AND C>60) 但我认为这不是一种优雅的方式。只有3个值。如果表中有10或20个值

我是MySQL的新手,我被困在以下问题上。 我有一个表,其中有3个数值字段。我叫它们A、B和C。 我想找到至少有两个大于60的值的记录。 解决这个问题的一个方法是

SELEC * FROM table WHERE (A>60 AND B>60) OR (A>60 AND C>60) OR (B>60 AND C>60) OR (A>60 AND B>60 AND C>60)
但我认为这不是一种优雅的方式。只有3个值。如果表中有10或20个值字段,我还想查找至少有两个大于60的值的记录。用上述方法解决问题将是非常丑陋的。 那么有没有更好的方法来解决这个问题呢?

尝试使用最大和最小的函数:

SELECT *
FROM yourTable
WHERE
    GREATEST(A, B, C) > 60 AND                              -- largest value
    (A + B + C) - GREATEST(A, B, C) - LEAST(A, B, C) > 60;  -- 2nd largest value

但老实说,你现在的版本几乎和我上面写的一样简洁。

嗨,蒂姆,你知道这些函数中使用的元素是否有限制吗?文件中没有提到这一点。不过答案很好+1@JorgeCampos好问题,它当然适用于3个参数,MySQL文档给出了5个参数的示例。除此之外,我不知道。好的,谢谢,我将对它进行一些测试并报告:好吧,这似乎取决于最大允许的数据包配置的值。当我使用了大量元素时,它返回给我错误代码:1153。获取的数据包大于“max_allowed_packet”,因此这些函数可能没有正式限制。相反,当发送到MySQL的数据包大小过载时,它们就会死亡。