【问题标题】:SQL - Return UserIds that only reviewed an item as "poor"SQL - 返回仅将项目评论为“差”的用户 ID
【发布时间】:2019-12-04 23:34:36
【问题描述】:

在 SQL 中查询以下问题的最佳方法是什么?

我想将只评论过项目的用户ID返回为“差”。 在下表中,只应返回UserID 1

UserID   ItemID    Rank
-------|---------|----------
1      | 1       | Poor
2      | 1       | Fair
1      | 2       | Poor
2      | 2       | Excellent
2      | 3       | Poor

查询(基于上表)应仅返回 ID 1,因为该 ID 从未将任何其他项目评价为“差”以外的任何其他项目

UserID
-------
1

【问题讨论】:

  • 你已经尝试了什么?

标签: sql group-by count having-clause


【解决方案1】:

使用group byhaving

select userid
from t
group by userid
having min(rank) = max(rank) and
       min(rank) = 'Poor';

【讨论】:

    【解决方案2】:

    您可以在having 子句中使用条件sum 进行聚合和过滤:

    select userid
    from mytable
    group by userid
    having sum(case when rank != 'Poor' then 1 else 0 end) = 0
    

    如果您正在运行 MySQL,这会变得更短:

    select userid
    from mytable
    group by userid
    having sum(rank != 'Poor') = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多