【问题标题】:SQL Count CalculationsSQL 计数计算
【发布时间】:2015-08-12 11:07:59
【问题描述】:

表格 CMC

ID CMD USERID STATUS
1  94    4     1
2  102  24     1
3  36   32     1
4  44   40     1
5  82   2      1 
6  66   27     1
7  94   56     1
8  102   2     1

表CCC

ID COURSEID CMD 
1     2     94     
2    16     102
3    8      82
4    5      94
5    4      66  
6    8      36
7    2      56
8    19     44-

表格命令

ID  COURSEID
44    5    
66    3   
102   16   
82    5   
94    8  
56    4   
66    2   
36    19   

我正在尝试创建一个带有状态计算的 sql 查询:

COUNT(CMC.USERID)  COURSED  COMPLETED  INPROCESS  NOTSTARTED

已完成:如果该特定 COURSEID 的 COUNT(CMC) == COUNT(CCC)

INPROCESS : 如果 COUNT(CMC) >0,但不等于 COUNT(CCC)

未开始:如果 COUNT(CMC) =0

任何人都可以通过以下查询建议我:

SELECT count(cmc.userid),

(SELECT count(ccc.id) FROM ccc HAVING count(cmc.userid) =  count(ccc.id) ) AS "completed"
(SELECT count(ccc.id) FROM ccc HAVING count(cmc.userid) >0  AND count(ccc.id) !== count(cmc.userid) ) AS "Inprocess"
(SELECT count(ccc.id) FROM ccc HAVING count(cmc.userid) =  0 ) AS "Notstarted"

FROM 
cmc 
WHERE status = 1

【问题讨论】:

  • 请显示您想要的结果。你的规则没有意义。例如,只有一张表有courseid。表之间是什么关系?
  • 这两张表之间还有一张表,我现在更新一下
  • @Gordon Linoff - 我已经更新了表格。
  • 谁能建议我使用 sql 查询。

标签: sql


【解决方案1】:

我通常更喜欢在子选择语句中进行摘要。然后我可以更轻松地解决它。这是完成的查询(如果我正确理解您的问题):

SELECT UserId, 
    CASE WHEN CMCount=CCCount THEN 1 ELSE 0 END AS Completed, 
    CASE WHEN CMCount>0 and CMCount<>CCCount THEN 1 ELSE 0 END AS InProcess,
    CASE WHEN CMCount=0 THEN 1 ELSE 0 END AS NotStarted
FROM (
    SELECT CMC.USERID AS UserId, COUNT(CMC.CMD) AS CMCount, COUNT(CCC.CMD) AS CCCount
    FROM CMC LEFT JOIN CCC ON CMC.CMD=CCC.CMD
    GROUP BY CMC.USERID
    ) AS Summary

【讨论】:

  • 它显示语法错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“AS“已完成”、CASE WHEN CMCount > 0 和 CMCount CCCount THEN 1 ELSE 0 附近使用正确的语法
  • 是的,对不起。我忘了结束我的案例陈述。我更新了代码(上图)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多