mysql - SQL 对每个 userID 记录计算一个值,但 userId 的一个记录值为 x 的情况除外

标签 mysql sql group-by subquery

我被困住了,我现在知道如何提出我的问题,所以我用我想要的结果创建了一个假设场景。

我正在尝试创建一个查询,计算每个用户 ID 的水果数量,但记录水果为香蕉的用户 ID 除外。

+----------+--------+--------------+
| 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 的水果记录。

最佳答案

你只需要一个过滤子句:

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;

关于mysql - SQL 对每个 userID 记录计算一个值,但 userId 的一个记录值为 x 的情况除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554012/

相关文章:

SQL - 根据访问频率拆分大表?

sql - 按价格范围分组

sql - 仅使用一个标志对后续行进行分组

mysql - SQL,根据C列中的值(标志)计算两列A,B的SUM,性能

mysql - 将 REGEXP_REPLACE 替换为 DISTINCT

mysql - SQL 查询 : Speed up for huge tables

sql - 按星期几按小时计算的平均计数

php - 使用 PHP 解析 unicode 表情符号文本文件

mysql - 在一个行集中选择两个计数条件mysql

php - 如何在php中传递两个参数并获取过滤结果?