MYSQL 组合使用相同列的两个计数

标签 mysql sql

我有两个查询需要合并为一个查询。问题是他们在 where 子句中使用相同的列,具体取决于我需要获取的内容。

查询1

SELECT c.fullname, COUNT( DISTINCT sst.id ) AS   'Liczba rozpoczetych szkolen'
FROM mdl_course c
INNER JOIN mdl_scorm s ON s.course = c.id
INNER JOIN mdl_scorm_scoes_track sst ON s.id = sst.scormid
INNER JOIN mdl_user u ON u.id = sst.userid
WHERE sst.element =  'x.start.time'  AND u.deleted =0
GROUP BY c.fullname ORDER BY `Liczba rozpoczetych szkolen` ASC

查询2

SELECT c.fullname, COUNT(DISTINCT sst.userid ) AS  'Liczba_ukonczonych_szkolen'
FROM mdl_course c
INNER JOIN mdl_scorm s ON s.course=c.id
INNER JOIN mdl_scorm_scoes_track sst ON s.id = sst.scormid
INNER JOIN mdl_user u ON sst.userid=u.id
where `element`='cmi.core.score.raw' and `value` = 100 and u.deleted = 0
GROUP BY c.fullname ORDER BY `Liczba_ukonczonych_szkolen` DESC

它们依赖于名为“element”的同一列。

如何将结果显示为

fullname Liczba rozpoczetych szkolen  Liczba_ukonczonych_szkolen 
   A1                  34                       4
   A2                   5                       3
   A3                   34                      33

我想出了这个,它有效。感谢您的建议@HoneyBadger

    SELECT t1.fullname, t1.Liczba_rozpoczetych_szkolen, t2.Liczba_ukonczonych_szkolen,
    round(((t2.Liczba_ukonczonych_szkolen /t1.Liczba_rozpoczetych_szkolen)*100),2) as procentowo
    FROM 
    (SELECT c.fullname, COUNT( DISTINCT sst.id ) AS   Liczba_rozpoczetych_szkolen
    FROM mdl_course c
    INNER JOIN mdl_scorm s ON s.course = c.id
    INNER JOIN mdl_scorm_scoes_track sst ON s.id = sst.scormid
    INNER JOIN mdl_user u ON u.id = sst.userid
    WHERE sst.element =  'x.start.time'  AND u.deleted =0
    GROUP BY c.fullname )  AS t1,
    (SELECT c.fullname, COUNT(DISTINCT sst.userid ) AS  Liczba_ukonczonych_szkolen
    FROM mdl_course c
    INNER JOIN mdl_scorm s ON s.course=c.id
    INNER JOIN mdl_scorm_scoes_track sst ON s.id = sst.scormid
    left join mdl_user u ON sst.userid=u.id
    where `element`='cmi.core.score.raw' and `value` = 100 and u.deleted = 0
    GROUP BY c.fullname) as t2
    WHERE t1.fullname = t2.fullname

最佳答案

您可以像这样将它们连接在一起:

SELECT      COALESCE(R.fullname, U.fullname) AS fullname
,           COALESCE(R.Liczba_rozpoczetych_szkolen, 0) AS Liczba_rozpoczetych_szkolen
,           COALESCE(R.Liczba_ukonczonych_szkolen, 0) AS Liczba_ukonczonych_szkolen
FROM        (
                SELECT      c.fullname
                ,           COUNT( DISTINCT sst.id ) AS   Liczba_rozpoczetych_szkolen
                FROM        mdl_course c
                INNER JOIN  mdl_scorm s 
                        ON  s.course = c.id
                INNER JOIN  mdl_scorm_scoes_track sst 
                        ON  s.id = sst.scormid
                INNER JOIN  mdl_user u 
                        ON  u.id = sst.userid
                WHERE       sst.element =  'x.start.time'  
                        AND u.deleted =0
                GROUP BY    c.fullname
            ) AS R
FULL JOIN   (
                SELECT      c.fullname
                ,           COUNT(DISTINCT sst.userid ) AS  Liczba_ukonczonych_szkolen
                FROM        mdl_course c
                INNER JOIN  mdl_scorm s 
                        ON  s.course=c.id
                INNER JOIN  mdl_scorm_scoes_track sst 
                        ON  s.id = sst.scormid
                INNER JOIN  mdl_user u 
                        ON  sst.userid=u.id
                where       `element`='cmi.core.score.raw' 
                        AND `value` = 100 
                        AND u.deleted = 0
                GROUP BY    c.fullname
            ) AS U
        ON  R.fullname = U.fullname

关于MYSQL 组合使用相同列的两个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648578/

相关文章:

mysql - phpmyadmin 服务器变量和 session 值

c# - 存储过程返回 int 而不是结果集

mysql - 如何计算每位教师所教的学生数量而不包括重复的学生数量?

php - 交易数据库中的多值属性

mysql - 如何避免 MySQL 查询中的浮点运算?

sql - 基本 SQL 子查询

php - mysql join 显示复制结果

Mysql逗号分隔值

php - mysql查询锁定表

php mysqli 真正的转义字符串添加反斜杠