首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高级mysql查询以查找项目以完成项目组

高级mysql查询以查找项目以完成项目组
EN

Stack Overflow用户
提问于 2022-07-24 21:38:46
回答 1查看 20关注 0票数 0

我试图做一个基于特定标准的高级数字选择。我有一张画清单,每幅画上都有N种颜色。我只有几种特定的颜色。DB是超级容易的:一个绘画表(id-name),一个绘画表(id-name)和一个连接颜色和绘画的表(painting_id - colour_id)。

带DB和查询的游乐场

我的第一个问题是找到我能用我所拥有的颜色“画”的画。我使用这个查询(假设我有颜色4,5,6,7,8,9,10,11,12,13,14):

代码语言:javascript
运行
复制
SELECT sub1.painting_id AS id FROM
(
  SELECT painting_id, count(color_id) AS tot FROM painting_colors GROUP BY painting_id
) AS sub1,
(
  SELECT painting_id, count(color_id) AS matched FROM painting_colors WHERE color_id IN(4,5,6,7,8,9,10,11,12,13,14) GROUP BY painting_id
) AS sub2
WHERE sub1.painting_id = sub2.painting_id AND (tot - matched) = 0

这很好用,但现在我想找出我应该“买”哪种颜色,这样我才能画出我没有它画不出的最大数量的画。

实现这一目标的一个错误方法是搜索我没有的最常用的颜色,使用以下查询:

代码语言:javascript
运行
复制
SELECT color_id, count(*) FROM painting_colors WHERE color_id NOT IN(4,5,6,7,8,9,10,11,12,13,14) GROUP BY color_id ORDER BY count(*) DESC

但我知道这是错误的,因为它会告诉我最常用的颜色,而不是我需要完成绘画的颜色,那甚至可能是非常罕见的绘画。

我脑子里唯一想到的就是使用第一个查询每次添加一个不同的color_id来查看可以完成的绘画计数,最后我会排序这些计数,我会找到最想要的颜色,但我想这是非常糟糕的表现,我相信有一个更聪明的方法。

步骤1可以是找到每一幅画,并丢弃丢失的颜色1,就像第一个查询一样,但是像这样改变计数。

代码语言:javascript
运行
复制
(tot - matched) = 1

在那之后,我迷失了

有什么建议吗?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-25 07:48:58

我找到了答案,也多亏了曾傑瑞

代码语言:javascript
运行
复制
SELECT 
    color_id, COUNT(*) AS would_unlock_paintings
FROM painting_colors
WHERE painting_id IN 
(
    SELECT sub1.painting_id AS id FROM
    (
        SELECT painting_id, count(color_id) AS tot FROM painting_colors GROUP BY painting_id
    ) AS sub1,
    (
        SELECT painting_id, count(color_id) AS matched FROM painting_colors WHERE color_id IN(2,4,5,7,9,11,12,13,15,17,18) GROUP BY painting_id
    ) AS sub2
    WHERE sub1.painting_id = sub2.painting_id AND tot - matched = 1
)
AND color_id NOT IN (2,4,5,7,9,11,12,13,15,17,18)
GROUP BY color_id

有了这些颜色: 2,4,5,7,9,11,12,13,15,17,18,我们发现添加color_id:1会“解锁”2幅画,而color_id:21会解锁一幅画

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73102240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档