2016-03-08 75 views
1
  1. 我有一张表,其中包含来宾对于事件的数据。我可以检索的人谁出席(membersAttended)与此查询次数:结合并使用来自两个不同表的SQL值的算术运算

    SELECT COUNT(DISTINCT g.`name1`) AS `membersAttended` 
        FROM `tmc_doorapp_guests` g 
        LEFT JOIN `tmc_doorapp_events` e 
        ON e.`id` = g.`event_id` 
        WHERE `name1` REGEXP '^[0-9]+$' 
        AND e.`date` > DATE_SUB(NOW(), INTERVAL 30 DAY) 
        AND g.`checkin` = 1; 
    
  2. 要检索的成员总数(totalMembers)我使用:

    SELECT COUNT(DISTINCT `id`) AS `totalMembers` 
        FROM `tmc_users`; 
    
  3. 要得到百分比值totalPercent)的成员谁参加了总成员,我使用PHP做出这两个查询,然后像这样计算:

    $totalPercent = number_format(($membersAttended/$totalMembers*100),2); 
    

我已经试过了两个查询,并以类似的方式下面的百分比计算相结合,没有运气:

SELECT COUNT(DISTINCT g.`name1`) AS `membersAttended`, 
     COUNT(DISTINCT m.`id`) AS `totalMembers`, 
     (`membersAttended` * 100/`totalMembers`) AS `totalPercent` 
     FROM `tmc_doorapp_guests` g, `tmc_users` m 
     LEFT JOIN `tmc_doorapp_events` e 
     ON e.`id` = g.`event_id` 
     WHERE `name1` REGEXP '^[0-9]+$' 
     AND e.`date` > DATE_SUB(NOW(), INTERVAL 30 DAY) 
     AND g.`checkin` = 1; 

我也试图拓展出列:

SELECT COUNT(DISTINCT g.`name1`) AS `membersAttended`, 
     COUNT(DISTINCT m.`id`) AS `totalMembers`, 
     (COUNT(DISTINCT g.`name1`) * 100/COUNT(DISTINCT m.`id`)) AS `totalPercent` 
     FROM `tmc_doorapp_guests` g, `tmc_users` m 
     LEFT JOIN `tmc_doorapp_events` e 
     ON e.`id` = g.`event_id` 
     WHERE `name1` REGEXP '^[0-9]+$' 
     AND e.`date` > DATE_SUB(NOW(), INTERVAL 30 DAY) 
     AND g.`checkin` = 1; 

这给我的错误:

Error code: 1054. Unknown column 'g.event_id' in 'on clause'

如何将这些SQL/PHP查询/计算组合到一个SQL查询中?

+1

交换'tmc_doorapp_guests克,tmc_users为了M'有适当的JOIN,即:'tmc_users男,tmc_doorapp_guests g' – mitkosoft

+0

@mitkosoft这工作!添加这个作为答案,我会接受。为什么会这样? – Ben

+0

它来自SQL严格模式,以便在查询中遵循严格的(即适当的)语法。 – mitkosoft

回答

0

你可以使用子查询:

SELECT COUNT(DISTINCT g.`name1`) AS `membersAttended`, 
     (SELECT COUNT(DISTINCT `id`) FROM `tmc_users`) AS `totalMembers`, 
     COUNT(DISTINCT g.`name1`) * 100/(SELECT COUNT(DISTINCT `id`) 
              FROM `tmc_users`) AS `totalPercent` 
FROM `tmc_doorapp_guests` g 
LEFT JOIN `tmc_doorapp_events` e 
ON e.`id` = g.`event_id` 
WHERE `name1` REGEXP '^[0-9]+$' 
AND e.`date` > DATE_SUB(NOW(), INTERVAL 30 DAY) 
AND g.`checkin` = 1;