gpt4 book ai didi

MySQL 复杂 SELECT

转载 作者:行者123 更新时间:2023-11-29 08:59:08 28 4
gpt4 key购买 nike

我有一个 MySQL 表 (tbl_filters),包含 3 列:idcatval

idval 是数字,cat 是 varchar。每个 id 有多行。

我还有另一个包含多个列的表 (tbl_info),其中包括一个 id,它对应于 tbl_filters< 中的 id/。有一个名为 name 的列,这就是我要查找的列。

我想选择与 cat 的设定值匹配的所有行的名称,但前提是 valcat是此 id 的最大值,并且仅当它高于设置的最小值 val 时。

在伪代码中,它会是这样的:

SELECT tbl_info.name FROM tbl_info,tbl_filters
WHERE (tbl_info.id=tbl_filters.id) AND (cat="mycat") AND (val>=0.3)
AND (there are no other rows for this id in tbl_info with a higher value for val)

示例:

tbl_filters
id,cat,val
1 eg1 0.43
1 eg2 0.60
1 eg3 0.78

tbl_info
id name
1 MyName

在上面的示例中,只有当我正在查找名为eg3的cat时才应该返回一个值,因为它具有最高的值。对于其他猫,不应返回任何内容,因为它们不是最高值。

另一种选择是在 tbl_info 中为具有最高值的猫创建一个列,但这是一个我希望避免的困惑解决方案。

最佳答案

我想我正在关注您...INNER-MOST 查询会预先限定您的最小值资格的每个 ID 的最高值以及符合资格的类别。一旦获得该列表,请重新加入以从 tbl_info 中获取名称。我已第二次重新加入 tbl_filters,以防该记录上有您想要的其他元素,例如汇率日期或其他内容。如果您不需要,您可以忽略第二个“tf2”连接,只需将字段列表从 tf2.val 更改为 PreQualified.HighestQualVal。

select
ti.id,
ti.name,
tf2.val
from
( select
tf.id,
max( tf.val ) as HighestQualVal
from
tbl_filters tf
where
tf.cat = "mycat"
and tf.val >= 0.3
) PreQualified

JOIN tbl_info ti
on PreQualified.id = ti.id

JOIN tbl_filters tf2
on PreQualified.id = tf2.id
AND PreQualified.HighestQualVal = tf2.val

关于MySQL 复杂 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123102/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com