C# MYSQL多重计数

C# MYSQL多重计数,c#,asp.net,mysql,C#,Asp.net,Mysql,我有两个表,一个叫做测试,两个结果 #1 TESTS (TESTID, LEVELID) #2 RESULTS (USERID, TESTID, SCORE) 我想得到两个计数,一个等级的总测试数,和两个等级的总测试数,其中分数=100,分组ID 我有15个等级,所以我基本上想要得到这样的结果 Level 1 - 15 tests, 3 perfect Level 2 - 25 tests, 5 perfect .... .... Level 15 - 75 tests, 8 perfect

我有两个表,一个叫做测试,两个结果

#1 TESTS (TESTID, LEVELID)
#2 RESULTS (USERID, TESTID, SCORE) 
我想得到两个计数,一个等级的总测试数,和两个等级的总测试数,其中分数=100,分组ID

我有15个等级,所以我基本上想要得到这样的结果

Level 1 - 15 tests, 3 perfect
Level 2 - 25 tests, 5 perfect
....
....
Level 15 - 75 tests, 8 perfect
如何使用1个SQL语句实现这一点,这是实现这一点的最佳方法吗

谢谢。

诸如此类:

SELECT 'Level '+TestID+' - '+Count(*)+' tests, '+SUM(CASE WHEN Score = 100 THEN 1 ELSE 0 END )+' perfect'
FROM Results
GROUP BY TestID

mysql中的语法可能不同,您可能需要castTestID作为varchar。

这是一个提出得很好的问题,我认为在这种情况下应该问这个问题

首先,为测试和结果执行联接:

 SELECT
    t.level,
    SUM(CASE WHEN r.score = 100 THEN 1 ELSE 0 END) AS perfectcount
 FROM tests t
 JOIN results r
    ON t.testid = r.testid
 GROUP BY t.testid
然后在测试中使用另一个连接来扩展它,以获得级别和:

 SELECT t.level,
     COUNT(*) AS levelcount,
     t0.perfectcount
 FROM tests AS t
 JOIN {
     SELECT
        t.level,
        SUM(CASE WHEN r.score = 100 THEN 1 ELSE 0 END) AS perfectcount
     FROM tests t
     JOIN results r
        ON t.testid = r.testid
     GROUP BY t.testid
) AS t0
    ON t.level = t0.level
GROUP BY t.level

我不确定,但我认为abc+zxc在MySQL中不起作用,所以最好使用CONCAT'Level',LEVELID。。。相反我认为TESTID实际上不是LEVELID,所以您需要加入TESTS表,改为:'level',LEVELID',-',COUNTr.TESTID,'TESTS'。。。根据t.TESTID上的r内部连接测试t的结果,t.LEVELID=r.TESTID组;对于1-15级测试,3完美行,这是我希望存储在datatable中的数据的一个示例。我可以在以后从该表中获取数据,轻松修改其输出显示。现在我尝试了qString=SELECT tTests.cLevelID,COUNT*FROM tTests,tResults其中tResults.cUserID=+gUID+和tResults.cTestID=tTests.cTestID和tResults.cScore=100,以及tTests.cLevelID>0按tTests.cLevelID按tTests.cLevelID ASC分组;但我只在结果区有测试时才得到结果。我希望即使有零个perect 100测试也能得到结果:只需在where ClauseeExcellent答案中去掉tResults.cScore=100,只需缺少where userID=currentUSERID,在哪里最好?。最后一个答案是什么?不对吗?它也写得很好。好的,方向正确,到目前为止我注意到的事情。1给满分结果打1或0,但不加总。2总测试似乎乘以结果区域中发现的测试数量…不确定原因。3需要比较userID,所以它不是所有用户的所有测试。OK 1和2通过将GROUP by t.testid更改为GROUP by t.level来修复,仍然试图找出将用户ID放置在何处:修复了3,在r.score=100和r.userID='userIDVar'时,将userID='userIDVar'添加到SUMCASE中,然后1其他0结束!