我之前在这里发布了一个问题:Mysql query with joined tables problems 但没有得到很好的答案,所以我想我把它分解,只显示让我头疼的部分,我可能会更快地得到这个问题的答案,如果我能解决这个问题,我也能解决前面的问题。
这些值指的是 item_id
,我想获取 item_id
,其中该项目指的是 (('good' OR 'bad') AND '快')
所以 item_id
1 必须列出来,因为它既好又快
item_id
2 不应该列出,因为它速度不快。
我想要得到的结果
item_id
1
5
如果我有这样一张 table
id item_id value
1 1 'good'
2 1 'fast'
3 2 'good'
4 2 'slow'
5 3 'good'
6 3 'slow'
7 4 'bad'
8 4 'slow'
9 5 'bad'
10 5 'fast'
11 6 'moderate'
12 6 'fast'
有人可以帮助我吗?
最佳答案
一种理解方式是:您希望每个项目都有一个声明,因此您可以按项目聚合和分组。标准出现在 HAVING
子句中。
select item_id
from mytable
group by item_id
having count(case when value = 'fast' then 1 end) >= 1
and count(case when value in ('good','bad') then 1 end) >= 1;
(您还可以使用 sum(case when value = 'fast' then 1 else 0 end) >= 1
或 max(case when value = 'fast' then 1 else 0 end) = 1
或沿这些行的一些表达式。COUNT(expression)
计算不为空的表达式。由于我省略了 ELSE
分支,非- 匹配记录结果为 null,因此不计算在内。有些人更喜欢 SUM
,有些人更喜欢 COUNT
- 这最终是个人喜好问题。)
关于mysql - mysql中的一种简单查询但无法解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810849/