对于SQL IN运算符
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
如果要选择首先匹配所有值的行?我确实意识到查询可以翻译成
SELECT * FROM Customers
WHERE Country = Germany OR Country = France OR Country = UK;
但我要说我有这张桌子
[id - customer - Country]
[ 1 - CUS1 - Germany]
[ 2 - CUS1 - UK ]
[ 3 - CUS2 - UK ]
[ 4 - CUS3 - Germany]
[ 5 - CUS1 - France ]
[ 6 - CUS3 - UK ]
[ 7 - CUS2 - France ]
[ 8 - CUS2 - Germany]
静态将是
CUS1 = [Germany, UK, France];
CUS2 = [UK, France, Germany];
CUS3 = [Germany, UK];
对于IN ('Germany', 'France', 'UK');
我期望得到的是[CUS1, CUS2, CUS3];
但对于IN ('Germany', 'UK');
我期望得到的是[CUS3, CUS1, CU2];
但我仍然继续[CUS1, CUS2, CUS3];
我要做的是首先获得匹配的值,所以如果我有IN ('Germany', 'UK');
,我首先得到CUS3
,因为它有确切的数字和国家/地区CUS1
因为它的前两个国家也完全相同,但是对于额外的国家,CUS2
最后因为匹配的国家与额外的国家相反。
答案 0 :(得分:2)
如果您想计算匹配数,那么单IN
是不够的。您需要组合来自多行的数据 - 这表明聚合。
您可以通过以下方式吸引客户:
SELECT c.customer
FROM Customers c
WHERE c.Country IN ('Germany', 'France', 'UK')
GROUP BY c.customer
ORDER BY COUNT(c.County) DESC;
(注意:如果您可以有重复项,请在COUNT(DISTINCT)
子句中使用HAVING
。)
如果您需要原始行,请使用IN
,EXISTS
或JOIN
来获取这些行。