0

我将尝试尽可能简单地解释它:

首先是一些带有虚拟数据的数据库结构。

结构

tb_spec_fk

feature     value
-----------------
1           1
1           2
1           3
1           4
1           5
2           2
2           3
3           1
3           4
4           2
4           3
4           4
5           1
5           3
5           5
6           3
6           5

tb_spec_feature

feature_id  filter
------------------
1           2
2           2
3           2
4           2
5           1
6           0

tb_spec_value

value_id    name
----------------
1           10
2           20
3           30
4           40
5           50

现在,我想要的是以下结果

结果

feature_id  min_value   max_value
---------------------------------
1           10          50
2           20          30
3           10          40
4           20          40

但是怎么做?

逻辑

从 tb_spec_feature 获取其中“过滤器”等于 2 的最高值和最低值,它们存在于 tb_spec_value 表中并通过 tb_spec_fk 表连接在一起。

我的尝试

很多!但我会放过你:)

4

2 回答 2

2
SELECT
    f.feature_id AS feature_id,
    MAX(value.name) AS max_value,
    MIN(value.name) AS min_value
FROM tb_spec_feature AS f
    JOIN tb_spec_fk AS fk ON f.feature_id=fk.feature
    JOIN tb_spec_value AS value ON fk.value=value.id
WHERE f.filter=2
GROUP BY f.feature_id

这两个JOIN语句将一个特性“链接”到一个值。GROUP BY对具有相同特征 id 的所有行进行分组,然后您可以在这些列上采用 min 或 max 或任何其他聚合函数。

演示

于 2013-02-05T19:18:56.337 回答
0

这是你如何做到的

select 
    tsf.feature_id,
    tsvl.name as Min_Value,
    tsvr.name as Max_Value
from tb_spec_feature as tsf
inner join (select feature , MIN(value) MinV,MAX(value)MaxV from tb_spec_fk group by feature order by feature)as tsfkl on tsfkl.feature = tsf.feature_id
left join tb_spec_value as tsvl on tsvl.value_id = tsfkl.MinV
left join tb_spec_value as tsvr on tsvr.value_id = tsfkl.MaxV
where tsf.filter = 2
group by tsf.feature_id

输出

feature_id  | Min_Value | Max_Value
---------------------------------
1           |   10      |   50
2           |   20      |   30
3           |   10      |   40
4           |   20      |   40

小提琴演示

于 2013-02-05T19:56:10.983 回答