0

我正在尝试将COUNT表中一个值的总和与另一个值的总和进行比较COUNT,我只是不确定如何正确地做到这一点。

如果表中的总数高于表中的SalesID总数COUNT,那么我想输出这些值。total_salesfidCOUNTtotal_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

即使只知道哪个UserIDSales>fid也很好:

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

在线示例

我尝试了几种方法,例如UNION,但这只是将所有值合并在一起。

4

3 回答 3

2

使用子查询连接

select uid,leadcount,salescount,salescount-leadcount as diff from 
(
SELECT x.uid, COUNT(*) leadcount, COUNT(DISTINCT x.fid)
FROM total_leads AS x
WHERE x.uid BETWEEN 1 AND 5
GROUP BY x.uid
) t1 left join 
(
SELECT ud.UserId, COUNT(*) salescount, COUNT(DISTINCT ud.SalesID)
FROM total_sales AS ud
WHERE ud.UserId BETWEEN 1 AND 5  
GROUP BY ud.UserID
) t2 on t1.uid=t2.UserId
于 2019-02-15T06:36:15.033 回答
2

试试这个代码,

 SELECT x.uid,COUNT(DISTINCT x.fid) AS leads,COUNT(DISTINCT ud.SalesID) AS 
 sales,((COUNT(DISTINCT ud.SalesID))-(COUNT(DISTINCT x.fid)))
 FROM
 total_leads AS X,total_sales AS ud WHERE x.uid=ud.UserId AND ud.UserId BETWEEN 1 AND 5 
 GROUP BY ud.UserID;
于 2019-02-15T06:42:13.040 回答
0

您可以使用以下方法执行此操作,您可以在其中比较每个表的总数

select t1.uid,t2.sales_count,t1.leads_count,
      case when t1.leads_count > t2.sales_count then t1.leads_count -t2.sales_count 
           else t2.sales_count -t1.leads_count
      end as diff
from 
(
select uid,count(fid) as leads_count
from total_leads
group by uid
)t1
inner join 
(
select UserID,count(SalesID)as sales_count
from total_sales
group by UserID
)t2 on t1.uid = t2.userid ;
于 2019-02-15T07:27:33.770 回答