簡體   English   中英

MySQL - Left Join + Group 未按預期工作

[英]MySQL - Left Join + Group by not working as expected

所以,

我一次又一次地使用 LEFT JOIN,直到現在我從未遇到過問題,我終生無法解決它! 請看一下。

這是我正在使用的表中的數據片段。 ——

ITEM_NO  R_TYPE POS
394392      BT1 POS1
394392      BT1 POS1
394392      BT1 POS1
394392      BT1 POS1
394392      BT1 POS1
394392      BT2 POS2
394392      BT2 POS2
394392      BT2 POS2
394397      BT1 POS1
394397      BT1 POS1
394397      BT1 POS3
394397      BT1 POS3
394397      BT1 POS2
394397      BT2 POS2
394397      BT2 POS1
394397      BT2 POS1
394444      BT3 POS1

我正在嘗試運行左連接查詢來計算具有特定POS條件的不同項目編號,並最終按R_TYPE對它們進行分組

Here is the SQL I have tried - 

SELECT * FROM 
          ( SELECT COUNT(DISTINCT ITEM_NO) AS CNT1, R_TYPE, 
          FROM LIVE_ITEMS WHERE AND R_TYPE LIKE 'BT%' AND
          POS NOT IN ('POS8') ) J1
           LEFT JOIN
           ( SELECT COUNT(DISTINCT ITEM_NO) AS CNT2, R_TYPE, 
          FROM LIVE_ITEMS WHERE AND R_TYPE LIKE 'BT%' AND
          POS  IN ('POS1','POS2','POS3') ) J2
          ON J1.R_TYPE= J2.R_TYPE
          GROUP BY J1.R_TYPE

如果我運行這個 sql,我會得到以下結果 -

CNT1    R_TYPE  CNT2    R_TYPE
137     BT1     137     BT1

這不是我想要的,我期待以下並且不明白為什么..

預期數據 -

CNT1    R_TYPE  CNT2    R_TYPE
137     BT1     137     BT1
45      BT2     76      BT2
98      BT3     102     BT3

有什么建議嗎?

更正了您的查詢。 請檢查。

 SELECT * FROM 
      ( SELECT COUNT(DISTINCT a.ITEM_NO) AS CNT1, a.R_TYPE 
          FROM LIVE_ITEMS a
         WHERE a.R_TYPE LIKE 'BT%' 
           AND a.POS NOT IN ('POS8')
         GROUP BY a.R_TYPE ) J1
   LEFT JOIN
       ( SELECT COUNT(DISTINCT b.ITEM_NO) AS CNT2, b.R_TYPE 
           FROM LIVE_ITEMS b
          WHERE b.R_TYPE LIKE 'BT%' 
            AND b.POS  IN ('POS1','POS2','POS3')
         GROUP BY b.R_TYPE) J2
   ON J1.R_TYPE= J2.R_TYPE
 GROUP BY J1.R_TYPE

如果沒有 GROUP BY,則只有一個組,並且不確定為該組選擇哪個值

  SELECT * FROM 
  ( SELECT COUNT(DISTINCT LIVE_ITEMS.ITEM_NO) AS CNT1, LIVE_ITEMS.R_TYPE, 
  FROM LIVE_ITEMS WHERE LIVE_ITEMS.R_TYPE LIKE 'BT%' AND
  LIVE_ITEMS.POS NOT IN ('POS8') GROUP BY LIVE_ITEMS.R_TYPE) J1
   LEFT JOIN
  ( SELECT COUNT(DISTINCT LIVE_ITEMS.ITEM_NO) AS CNT2, LIVE_ITEMS.R_TYPE, 
  FROM LIVE_ITEMS WHERE LIVE_ITEMS.R_TYPE LIKE 'BT%' AND
  LIVE_ITEMS.POS  IN ('POS1','POS2','POS3') GROUP BY LIVE_ITEMS.R_TYPE) J2
  AND J1.R_TYPE= J2.R_TYPE
  GROUP BY J1.R_TYPE

沒有 Group by COUNT(DISTINCT ITEM_NO)總是給出一個結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM