[英]self join on multiple count columns
我需要向写入查询,并且很难得出结果。
这是我的专栏
电子邮件项目PRODUCT_CATEGORY
我需要选择特定的emailAddress至少浏览过2次类别并且至少具有2种不同的产品的位置
所以记录可能看起来像这样
Email ITEM CATEGORY
joe@gmail Bread FOOD
joe@gmail Banana FOOD
joe@gmail Grapes FOOD
joe@gmail Hammer Tools
joe@gmail Hammer Tools
joe@gmail File Tools
meg@gmail Grass GARDEN
meg@gmail Grass GARDEN
meg@gmail Grass GARDEN
meg@gmail Grass GARDEN
我希望结果如下所示。 梅格失踪是因为她的物品都一样
Email Categroy DistinctItemCount
joe@gmail.com Food 3
joe@gmail.com Tools 2
我已经涵盖了类别,但是我看不到如何添加项目计数要求
select * from
(
select Email ,Product_Category, count(Product_Category) As CatCount
from Browsed
group by Email, Product_Category
) a
where CatCount >1
我已经看了很久了。
如果可以的话,请先谢谢您。
尝试此操作(应在主要的RDBMS上一致地工作)
SELECT Email, Product_Category Category, COUNT(DISTINCT Item) DistinctItemCount
FROM Browsed
GROUP BY Email, Product_Category
HAVING COUNT(DISTINCT Item) > 1
输出:
| EMAIL | CATEGORY | DISTINCTITEMCOUNT | -------------------------------------------- | joe@gmail | FOOD | 3 | | joe@gmail | Tools | 2 |
这是SQLFiddle演示(MySql)
这是SQLFiddle演示(SQL Server)
以后在发布SQL查询问题时,请指定RDBMS及其版本
让我们从消除输入表中所有重复的条目开始。 http://sqlfiddle.com/#!2/51991/3/0
SELECT DISTINCT Email, ITEM, CATEGORY
FROM Browsed
接下来,让我们按类别获取产品计数,其中每个类别中有两个或多个产品。 我们在此查询中使用第一个查询。 http://sqlfiddle.com/#!2/51991/7/0这是用户和类别的列表,其中用户在每个类别中查找两种或更多种不同的产品。
SELECT Email, Category, COUNT(*) Prodcount
FROM (
SELECT DISTINCT Email, ITEM, CATEGORY
FROM Browsed
) U
GROUP BY Email, Category
HAVING Prodcount >= 2
接下来,我们想知道查找两个或多个不同类别的用户。 像这样工作: http : //sqlfiddle.com/#!2/51991/8/0
SELECT Email, COUNT(*) Catcount
FROM (
SELECT DISTINCT Email, CATEGORY
FROM Browsed
) V
GROUP BY Email
HAVING Catcount >= 2
凉。 现在我们知道正在运行的用户。 是用户的名称同时出现在这些结果集中……两个或多个类别,每个类别中两个或多个项目。 http://sqlfiddle.com/#!2/8673a/1/0
SELECT W.Email, W.Category, W.Prodcount
FROM (
SELECT Email, Category, COUNT(*) Prodcount
FROM (
SELECT DISTINCT Email, ITEM, CATEGORY
FROM Browsed
) U
GROUP BY Email, Category
HAVING Prodcount >= 2
) W
WHERE W.Email IN
(
SELECT Email
FROM (
SELECT DISTINCT Email, CATEGORY
FROM Browsed
) V
GROUP BY Email
HAVING COUNT(*) >= 2
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.