0

COUNTテーブル内の 1 つの値の合計を別の値の合計と比較しようとしてCOUNTいますが、正しく行う方法がわかりません。

テーブルのSalesID合計COUNTがテーブルの合計total_salesよりも高い場合、それらの値を出力したいと思います。fidCOUNTtotal_leads

テーブル:

CREATE TABLE total_leads
    (`uid` int, `tstamp` int, `fid` int, `phone` varchar(2))
;

INSERT INTO total_leads
    (`uid`, `tstamp`, `fid`, `phone`)
VALUES
    (1, 1299795364, 1525, '""'),
    (1, 1309854563, 4031, '""'),
    (1, 1309854562, 3134, '""'),
    (5, 1280752536, 18, '""'),
    (5, 1280942244, 219, '""'),    
    (5, 1309862562, 1234, '""'),
    (5, 1480752536, 184, '""'),
    (5, 1520942244, 119, '""')
;

CREATE TABLE total_sales
    (`UserID` int, `SalesID` int, `Time` varchar(8))
;

INSERT INTO total_sales
    (`UserID`, `SalesID`, `Time`)
VALUES
    (1, 172, '12:57:43'),
    (1, 3563, '15:59:49'),
    (1, 9508, '01:46:47'),
    (5, 18935, '07:26:07'),
    (5, 19378, '08:06:41'),
    (1, 144, '11:52:41'),
    (1, 9248, '02:43:40'),
    (1, 3423, '14:54:45'),
    (5, 11935, '03:21:06'),
    (1, 1448, '05:02:24')
;

MySQL コマンド:

SELECT x.uid, COUNT(*), COUNT(DISTINCT x.fid)
FROM total_leads AS x
WHERE x.uid BETWEEN 1 AND 5
GROUP BY x.uid;

SELECT ud.UserId, COUNT(*), COUNT(DISTINCT ud.SalesID)
FROM total_sales AS ud
WHERE ud.UserId BETWEEN 1 AND 5  
GROUP BY ud.UserID;

これは (total_leads, total_sales) を返します:

 uid    COUNT(*)    COUNT(DISTINCT x.fid)
  1        3               3
  5        5               5

UserId  COUNT(*)    COUNT(DISTINCT ud.SalesID)
  1        7               7
  5        3               3

したがって、次のような結果が得られることを望んでいます。

UserId   Sales           Leads   Dif
  1        7               3      4

どれが>をUserID持っているかを知っているだけでも、まったく問題ありません。Salesfid

UserId  COUNT(*)    COUNT(DISTINCT ud.SalesID)
  1        7               7

オンライン例

など、いくつか試してみましUNIONたが、すべての値がマージされただけです。

4

3 に答える 3