目前使用SQLite3面临一个问题
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size IS NULL OR item_size = 'S';
上面的查询不起作用,它将只返回NULL
值而不是S
。
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S'
以上显然会让S
回归
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S'OR item_size IS NULL;
以上只返回NULL
值
我正在努力完成以下相同的工作,
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size IS NULL;
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S';
但是在一个命令中,由于WHERE column IS NULL OR column = 'value'
的性质,由于null效应算法的性质,只返回NULL
或'value',
我有没有任何过于/未知的SQL法律允许我绕过WHERE item_size IS NULL OR item_size = 'S';
从根本上不起作用?
使用
SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE coalesce(item_size, 'S') = 'S'
GROUP BY coalesce(item_size, 'S') -- will add nulls to S or
-- GROUP BY coalesce(item_size, 'null') - will add them as 'null' but filter them out by your where
你的问题是使用sum
做一个隐含的group by
- 而null
不能很好地与字符串组合 - 你必须明确group by
合并的值将空值分组到S