我有这样的表:
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。 每个职位都包含一组类别。
我想根据其工作选择具有两个或更多细节类别的客户数量。
可能这是一个简单的查询。
我该怎么做? 谢谢
答案 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 BY
和HAVING
:
select customer
from t
where category in (. . .)
group by customer
having count(*) = <n>;
此处. . .
是您想要的类别列表。 <n>
是该列表中的类别数。
如果您可以有重复的customer
/ category
对,请使用此having
:
having count(distinct category) = <n>