簡體   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