检索满足给定七个条件中的至少四个的行

ven*_*nki 3 sql oracle

我有一个名为'Alphabets'的表,其中的列名为'A to G'.

Table Name: Alphabets

Column Names: A | B | C | D | E | F | G  
Run Code Online (Sandbox Code Playgroud)

现在,我需要一个SQL查询来从表中检索满足以下列表中至少四个条件的所有行:

A = 1   
B = 2  
C = 3  
D = 4  
E = 5  
F = 6
G = 7
Run Code Online (Sandbox Code Playgroud)

我正在使用Oracle 10g数据库.

Dam*_*ver 8

SELECT * FROM Alphabets where
CASE WHEN A=1 THEN 1 ELSE 0 END +
CASE WHEN B=2 THEN 1 ELSE 0 END +
CASE WHEN C=3 THEN 1 ELSE 0 END +
CASE WHEN D=4 THEN 1 ELSE 0 END +
CASE WHEN E=5 THEN 1 ELSE 0 END +
CASE WHEN F=6 THEN 1 ELSE 0 END +
CASE WHEN G=7 THEN 1 ELSE 0 END >= 4
Run Code Online (Sandbox Code Playgroud)

但是关于这个表和查询的东西似乎是可疑的 - 感觉它应该真的是一个由两列组成的表,LetterValue说.


ppe*_*rka 5

我能想到的一个丑陋的解决方案(我确信必须有更好的解决方案,但是这个解决方案应该可行,但我不认为它在任何意义上都是最佳的......)

SELECT * 
FROM Alphabets
WHERE
CASE WHEN A=1 THEN 1 ELSE 0 END + 
CASE WHEN B=2 THEN 1 ELSE 0 END + 
CASE WHEN C=3 THEN 1 ELSE 0 END + 
CASE WHEN D=4 THEN 1 ELSE 0 END + 
CASE WHEN E=5 THEN 1 ELSE 0 END + 
CASE WHEN F=6 THEN 1 ELSE 0 END + 
CASE WHEN G=7 THEN 1 ELSE 0 END BETWEEN 4 AND 7
Run Code Online (Sandbox Code Playgroud)

这有问题:

  • 不能很好地扩展 - 新约束 - 查询中的新行...
  • 表现明智,它不是最佳的
  • 也只是简单可怕的丑陋