mysql - 如何使用 Outer Join 和 Group By 在查询中包含 NULL 值

标签 mysql sql

我有两个包含以下示例数据的表:

Table 1: `item_name`
| item_id | item_desc |
| 1       | apple     |
| 2       | orange    |
| 3       | banana    |
| 4       | grape     |
| 5       | mango     |

Table 2: `user_items`
| user_id | item_id |
| 127     | 1       |
| 127     | 2       |
| 127     | 4       |
| 128     | 1       |
| 128     | 5       |

我正在尝试使用以下查询选择 user_id 127 和 128 具有的每个 item_id 的总数,以及相应的 item_desc:

SELECT IFNULL(COUNT(ui.user_id), 0) AS total, in.item_desc 
FROM user_items AS ui 
RIGHT OUTER JOIN item_name AS in 
    ON ui.item_id = in.item_id 
WHERE ui.user_id IN (127, 128) 
GROUP BY ui.item_id
ORDER BY total DESC

上面查询的结果是:

| total | item_desc |
| 2     | apple     |
| 1     | orange    |
| 1     | grape     |
| 1     | mango     |

但它不包括 item_id 3,banana,我想用 RIGHT OUTER JOIN 检索它。我希望得到如下所示的结果:

| total | item_desc |
| 2     | apple     |
| 1     | orange    |
| 1     | grape     |
| 1     | mango     |
| 0     | banana    |

有什么方法可以修改查询以得到上述预期结果吗? 感谢您的宝贵时间。

最佳答案

您在使用计数的查询中出现了一点错误。这行得通。

select count(ui.item_id) as total, in.item_desc
from   item_name `in`
       left join user_items ui on ui.item_id = in.item_id
                                        and ui.user_id in (127, 128)
group by
       in.item_desc
order by total desc

关于mysql - 如何使用 Outer Join 和 Group By 在查询中包含 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662833/

相关文章:

mysql - 查找和替换字符的想法

sql - 我可以在 SQLite 中使用负 tinyint 吗?

sql - Linq To Sql 或 SQL 中的困难查询

sql - 等于操作中 “Latin1_General_CI_AS”和 “SQL_Latin1_General_CP1_CI_AS”之间的冲突

php - 对mysql中多个用户拥有的记录进行计算

php - 值在数组中的准备语句

MySQL order by optimization with joins and wheres

java - 使用 IN 子句和子选择查询多列的 Hibernate Criteria Query

sql - 在 Postgres 中,如何在同一查询中进行 COUNT 和 WHERE,然后对结果进行数学运算?

mysql - 选择从特定日期开始的MySQL数据