2016-03-08 76 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;