【问题标题】:Select min/max from multiple items从多个项目中选择最小值/最大值
【发布时间】:2013-02-05 19:14:01
【问题描述】:

我会尽可能简单地解释它:

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

结构

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 表连接在一起。

我的尝试

很多!但我会放过你:)

【问题讨论】:

  • My attemps A lot! But I'll spare you :) - 不。这是我们想看到的,看看你哪里出错了。从错误中吸取教训比仅仅得到答案更有益。
  • 你如何定义你的输出?似乎没有两个值针对一个记录的关系
  • 我不明白你如何获得最大值和最小值
  • 我将展示我在功能问题中的尝试。

标签: mysql minmax


【解决方案1】:
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 语句将a 特性“链接”到一个值。 GROUP BY 对具有相同特征 id 的所有行进行分组,然后您可以对这些列采用 min 或 max 或任何其他聚合函数。

Demo

【讨论】:

  • 非常感谢!它有效,最重要的是,我明白你在做什么!
【解决方案2】:

你可以这样做

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

Fiddle Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2013-10-27
    • 2011-04-05
    • 2015-02-22
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多