繁体   English   中英

在多个计数列上自行联接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM