我一直在解决哈佛大学 CS50 for SQL 在线课程中的问题集 0。里面有一个问题,上面写着:
在7.sql中,编写一个SQL查询来统计右手击球(或击球)和左手投掷(或投掷)的玩家数量,反之亦然。
players 表中有两列,称为 bats 和 throws。
我尝试了两种方法:
SELECT COUNT(id) FROM players
WHERE (bats = 'R' AND throws = 'L') OR (bats = 'L' AND throws = 'R');
给出了正确的结果。
不过,我也尝试过这个:
SELECT COUNT(id) FROM players
WHERE throws<>bats AND throws IS NOT NULL AND bats IS NOT NULL;
(根据我)逻辑上应该给出相同的答案。有人可以解释我缺少什么吗?抱歉,如果有任何格式问题,因为这是我的第一个问题。
如果
bats
和 throws
只有两个非空选项,那么您的第二个查询将与第一个查询等效。然而,有三个。也有双手击球的球员(即 bats
值为 'B'
):
sqlite> SELECT DISTINCT bats FROM players WHERE bats IS NOT NULL;
R
L
B
同样,有些球员的
throws
值为 'S'
,尽管我承认我对棒球了解不够,不知道这意味着什么:
sqlite> SELECT DISTINCT throws FROM players WHERE throws IS NOT NULL;
R
L
S