假设我有以下数据:
object size color units
------ ---- ----- -----
ball small red 3
ball small red 2
ball medium blue 2
ball medium blue 1
ball big yellow 2
hat big green 3
hat big green 4
umbrella medium blue 1
umbrella medium blue 4
umbrella big blue 4
umbrella huge red 2
umbrella huge green 1
book small white 4
book small brown 3
book medium brown 2
我需要一个查询来返回所有对象的所有对象颜色大小变化,其中至少一个变化的大小和颜色的总单位至少为 5,因此查询将返回这些行:
object size color total_units
------ ---- ----- ------
ball small red 5
ball medium blue 3
ball big yellow 2
umbrella medium blue 5
umbrella big blue 4
umbrella huge red 2
umbrella huge green 1
之所以会出现所有球及其每个尺寸-颜色变化的总数,是因为至少有 2 个不同的球,并且其中至少一个球的总单位数为 5 个或更多
之所以在结果中出现所有雨伞及其每个尺寸-颜色变化的总数,是因为至少有 2 把不同的雨伞,并且至少其中一把的总单位数为 5 或更多
帽子没有出现在结果中的原因是因为即使有超过 5 个单位(7)的大绿帽子,也没有至少 2 个不同的帽子
没有一本书出现在结果中的原因是即使有 3 本不同的书,也没有至少 5 个单元。
感谢您向我展示如何实现这一目标!
最佳答案
使用窗口函数(在最新版本的 MySQL 和 MariaDB 数据库中),这很容易:
select object, size, color, total_units
from (select object, size, color, sum(units) as total_units,
max(sum(units)) over (partition by object) as max_total_units,
count(*) over (partition by object) as cnt
from t
group by object, size, color
) t
where max_total_units >= 5 and cnt > 1;
关于MYSQL查询获取一列在不同组中多次出现并符合特定条件的所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692975/