Select 只有满足 where 子句 60% 的行 - SQL 服务器
Select only rows that satisfy 60% of the where clause - SQL Server
我在 SQL 中面临挑战。我有以下查询:
SELECT *
FROM Books
WHERE
Categories IN ('Fiction', 'art') OR
Language IN ('en', 'de') OR
Country = 'DE'
我要看结果,如果至少等于其中两个因素,就会被接受,不会被选中。
例如如果一本书有 Category = Fiction
和 Language = FR
和 Country = DE
=> 通过
一本书 Category = History
和 Language = FR
和 Country = DE
=> 失败
如何在 SQL 中实现?
我试图计算每一行的权重。每个因素都会将 0.3 添加到完整权重,并且只会选择具有 > 0.6
的那个
我也试过分组。但是我真的找不到正确的语法。
有什么想法吗?谢谢!
P.S。我不能把所有的可能性都放在我的 where
子句中,因为我有超过 3 个因素。
select * from
(
SELECT *,
case when Categories in ('Fiction', 'art') then 1 else 0 end as cat_condition,
case when Language in ('en', 'de') then 1 else 0 end as lang_condition,
case when Country = 'DE' then 1 else 0 end as country_condition
FROM Books
WHERE
Categories in ('Fiction', 'art') OR
Language in ('en', 'de') OR
Country = 'DE'
) tmp
where cat_condition + lang_condition + country_condition >= 2
这是 where
子句中的 case
表达式的一种情况:
SELECT *
FROM Books
WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
(CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
(CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
) >= 2;
或者,或者:
WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
(CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
(CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
) / 3.0 >= 0.6
我在 SQL 中面临挑战。我有以下查询:
SELECT *
FROM Books
WHERE
Categories IN ('Fiction', 'art') OR
Language IN ('en', 'de') OR
Country = 'DE'
我要看结果,如果至少等于其中两个因素,就会被接受,不会被选中。
例如如果一本书有 Category = Fiction
和 Language = FR
和 Country = DE
=> 通过
一本书 Category = History
和 Language = FR
和 Country = DE
=> 失败
如何在 SQL 中实现?
我试图计算每一行的权重。每个因素都会将 0.3 添加到完整权重,并且只会选择具有 > 0.6
的那个我也试过分组。但是我真的找不到正确的语法。
有什么想法吗?谢谢!
P.S。我不能把所有的可能性都放在我的 where
子句中,因为我有超过 3 个因素。
select * from
(
SELECT *,
case when Categories in ('Fiction', 'art') then 1 else 0 end as cat_condition,
case when Language in ('en', 'de') then 1 else 0 end as lang_condition,
case when Country = 'DE' then 1 else 0 end as country_condition
FROM Books
WHERE
Categories in ('Fiction', 'art') OR
Language in ('en', 'de') OR
Country = 'DE'
) tmp
where cat_condition + lang_condition + country_condition >= 2
这是 where
子句中的 case
表达式的一种情况:
SELECT *
FROM Books
WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
(CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
(CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
) >= 2;
或者,或者:
WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
(CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
(CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
) / 3.0 >= 0.6