sql为每个userid记录计算一个值,除非userid的一个记录值是x

4sup72z8  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(312)

我被困住了,我现在知道如何表达我的问题,所以我用我想要的结果创建了一个假设场景。
我正在尝试创建一个查询,计算每个userid的水果数量,对于有水果是香蕉的记录的userid除外。

+----------+--------+--------------+
| recordID | userId |    Fruit     |
+----------+--------+--------------+
|        0 |    112 | Apple        |
|        1 |    112 | Banana       |
|        2 |    112 | kiwi         |
|        - |      - | -            |
|        3 |    113 | Banana       |
|        4 |    113 | Pear         |
|        - |      - | -            |
|        5 |    114 | Dragon fruit |
|        6 |    114 | Pineapple    |
|        - |      - | -            |
|        7 |    115 | Dragon Fruit |
|        8 |    115 | Cherry       |
+----------+--------+--------------+

想要的结果:

+-------+-------------+--+
| count |    fruit    |  |
+-------+-------------+--+
|     2 | dragonfruit |  |
|     1 | pineapple   |  |
|     1 | cherry      |  |
+-------+-------------+--+

忽略userid为113的用户,因为它有一个值为banana的水果记录。

5anewei6

5anewei61#

使用 not in 和子查询

select count(*),fruit from
(
select * from t where userid not in(

select userId from t where Fruit='Banana'
)
) t1 group by fruit
olqngx59

olqngx592#

您只需要一个筛选子句:

select fruit, count(*)
from t
where not exists (select 1
                  from t t2
                  where t2.userid = t.userid and t2.fruit = 'banana'
                 )
group by fruit
order by count(*) desc;

相关问题