mysql - SQL 查询没有得到正确的计数

标签 mysql sql

我尝试编写一个查询,为每个用户返回他下了多少订单以及在多少家不同的商店:

SELECT user_id,display_name,count(store_id) as stores,count(order_id) as orders 
FROM `orders` natural join users 
where user_id NOT IN (7,766,79) 
group by user_id 
order by orders desc

在我看来,这个查询应该这样做,但出于某种原因,我在订单和商店列中得到了相同的值(而且我已经仔细检查过应该存在差异)。有人可以帮忙吗?

顺便说一句,order_id 是主键,store_id 和 user_id 是订单的外键。

编辑:

SELECT user_id,display_name,count(distinct store_id) as stores,count(order_id) as orders 
    FROM `orders` natural join users 
    where user_id NOT IN (7,766,79) 
    group by user_id 
    order by orders desc

有效,任何人都可以解释为什么我必须在这种情况下添加不同的关键字吗?

已解决:

使用@McAdam331 的评论我了解到原始查询在两个计数中计算具有相同用户 ID 的行,并且由于 post_ids 是唯一的,唯一 ID 计数与行计数相同,而 store_id 可以有双倍与行计数不相同。因此使用 distinct 解决了这个问题。

最佳答案

我只使用 COUNT(*) 获取订单数量,使用 COUNT(DISTINCT store_id) 获取商店数量:

SELECT u.user_id, u.display_name, COUNT(*) AS numOrders, COUNT(DISTINCT store_id) AS numStores
FROM orders o
JOIN users u
...

您的查询失败的原因是您在 store_id 上省略了 DISTINCT。因为每一行都有一个 store_id 和一个 order_id,所以每个组中都有相同数量的 store_id 和 order_id。但是,这并不是您真正要查找的内容,您要查找的是 DISTINCT store_id 的数量。

如果用户有可能两次使用相同的 order_id(虽然这对我来说没有意义),您也可以在该计数函数中添加 DISTINCT 关键字。

关于mysql - SQL 查询没有得到正确的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056207/

相关文章:

MySQL 分组查询中相同字段值计数的结果

返回语法错误的 PHP SQL 插入语句,不确定它可能是什么

javascript - 如果列等于 0 则删除行 (mysql)

MySQL : How to get latest row on optional where clause using group by?

php - 通过 unserialize() 函数和 mysql 查询获取所有数组值

sql - 使用组合框搜索数据库并显示多个结果

mysql - 跨层次数据优化 MySQL 查询

php - 优化 SQL 表以选择注册特定事件的参与者

sql - Rails Nested 有条件地加入 Activerecord

mysql - 使用 Sequelize 一次将许多内容保存到 MySql 时出现 SIGSEGV 错误