【问题标题】:Counting number of Sales from two tables从两个表中计算销售额
【发布时间】:2011-06-09 11:56:09
【问题描述】:

我使用 SUM ( CASE WHEN ) 来计算是和否的数量,它工作正常。

我在计算两张表中匹配的手机号码时遇到问题。它似乎没有正确计数。

奶制品表中有MobileNO字段,销售表中有mobile字段

SELECT 
       D.Username, 
       SUM(CASE WHEN D.type = 'Yes' THEN 1 ELSE 0 END) as Yes, 
       SUM(CASE WHEN D.type = 'No' THEN 1 ELSE 0 END) as No, 
       SUM(CASE WHEN D.type = '' THEN 1 ELSE 0 END) as Other, 
       (SELECT SUM(CASE WHEN D.MobileNo = S.mobile THEN 1 ELSE 0 END) from sales as S) as Sales, 
       COUNT(*) as TOTAL FROM dairy as D 
WHERE source = 'Company' AND UNIX_TIMESTAMP(CheckDate) >= 1293840000 AND UNIX_TIMESTAMP(CheckDate) <= 1322697600 
group by D.Username order by TOTAL DESC 

【问题讨论】:

  • 怎么算不正确?
  • @Mr E,请参阅 Parkyprg 答案。现在可以正常使用了。

标签: mysql sql database


【解决方案1】:
SELECT 
       D.Username, 
       SUM(CASE WHEN D.type = 'Yes' THEN 1 ELSE 0 END) as Yes, 
       SUM(CASE WHEN D.type = 'No' THEN 1 ELSE 0 END) as No, 
       SUM(CASE WHEN D.type = '' THEN 1 ELSE 0 END) as Other, 
       SUM(CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) as Sales, 
       COUNT(*) as TOTAL 
FROM dairy as D 
LEFT JOIN (SELECT DISTINCT mobile FROM sales) as S ON D.MobileNo = S.mobile
WHERE source = 'Company' AND UNIX_TIMESTAMP(CheckDate) >= 1293840000 AND UNIX_TIMESTAMP(CheckDate) <= 1322697600 
group by D.Username order by TOTAL DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多