SQL IN运算符选择ORDER?

时间:2017-10-01 12:42:37

标签: mysql sql

对于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最后因为匹配的国家与额外的国家相反。

1 个答案:

答案 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。)

如果您需要原始行,请使用INEXISTSJOIN来获取这些行。