MariaDB比较两个表中的数字计数

时间:2019-02-15 06:28:09

标签: mysql sql mariadb adminer

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

如果SalesID表中的COUNTtotal_sales高于fid表中的COUNTtotal_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;

返回(总线索,总销售额):

 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拥有Sales> fid也是完全可以的:

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

Online Example

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

尝试此代码,

document.getElementById('pre_map').innerHTML = "<div id='mapid' style='width: relative; height: 500px;'></div>";

答案 2 :(得分: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 ;