MySQL:如果值发生变化,则从计数中删除

标签 mysql select count locate

这是我的查询,我在其中选择 carton_id 的计数,但如果此纸箱有时被转移到其“assign_id”,那么我希望将其从该计数中删除。 我不能使用“==”,因为 allocate_id 始终是逗号分隔的字符串,如“24,25”,但 divert_id 将是其中之一或“999”

SELECT 
    assign_id, COUNT(DISTINCT(carton_id))
FROM
    induction
WHERE
    update_timestamp > '2019-11-21 00:00:00' and update_timestamp < '2019-11-22 00:00:00'
        AND LOCATE(divert_id, assign_id) = 0
        AND sorter_id = 2
        GROUP BY assign_id
ORDER BY assign_id;
carton | assign_id | divert_id |
abc123 | 24,26     | 999       |
abc123 | 24,26     | 999       |
abc123 | 24,26     | 999       |
abc123 | 24,26     | 24        |

所以结果应该是:

24,26 | 0

但我得到的计数是 1。

最佳答案

如果您使用 LOCATE,它会在分配 id 中获取子字符串 divert_id,在本例中为 24,26 中的 24,结果 LOCATE(divert_id, allocate_id) 不等于 0。还要按 allocate_id 和 divert_id 检查组。希望这会有所帮助。

关于MySQL:如果值发生变化,则从计数中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994986/

相关文章:

mysql - SQL 组合跨多个表的两个选择

sql - 获取具有条件的关联记录数

mysql - 为什么 select count(*) from table_name 这么慢?

php - Laravel withCount 包含 null 关系

mysql - 从 MySQL 表中选择不存在关系的所有行作为空单元格

javascript - jQuery 1.10.1 在选择时设置不存在的值

mysql - 为什么MySQL Count()是“扫描所有行”以获得结果?

mysql - 链接到另一个表以使用内部联接获取名称

mysql - 如何合并同一个表中的每 2 个连续列

带有 CONCAT 条件的 MySQL 选择