如何从组中选择

时间:2017-10-07 16:18:39

标签: mysql sql

我有这样的表:

idjob category customer
1560   001        1
1560   0010       1
1560   002        1
1562   001        2
1562   0010       2
1563   001        2
1563   002        3
1563   0010       3
1563   004        3

一个客户可以有更多的idjobs。 每个职位都包含一组类别。

我想根据其工作选择具有两个或更多细节类别的客户数量。

可能这是一个简单的查询。

我该怎么做? 谢谢

2 个答案:

答案 0 :(得分:0)

您可以计算每位客户不同idjob的数量:

SELECT   customer, GROUP_CONCAT(idjob) AS jobs
FROM     mytable
GROUP BY customer
HAVING   COUNT(DISTINCT idjob) > 1

答案 1 :(得分:0)

您可以使用以下方式让客户满足条件:

select customer
from t
group by customer
having min(category) <> max(category);

要获取数字,请使用子查询:

select count(*)
from (select customer
      from t
      group by customer
      having min(category) <> max(category)
     ) c;

请注意&#34; 2&#34;是一个特例。可以通过比较max()min()来处理。更一般的解决方案将使用count(distinct category) >= 2。但是,count(distinct)比简单的聚合函数更耗费资源。

编辑:

也许我误解了原来的问题。

如果您希望客户拥有一组特定类别,您仍然可以使用GROUP BYHAVING

select customer
from t
where category in (. . .)
group by customer
having count(*) = <n>;

此处. . .是您想要的类别列表。 <n>是该列表中的类别数。

如果您可以有重复的customer / category对,请使用此having

having count(distinct category) = <n>