简体   繁体   English

合并并对来自两个不同表的SQL值使用算术运算

[英]Combine and use arithmetic on SQL values from two different tables

  1. I have a table with data of guests to an event. 我有一张桌子,上面有活动客人的数据。 I can retrieve the number of people who have attended ( membersAttended ) with this query: 我可以通过此查询检索已出席的人数( membersAttended ):

     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. To retrieve the total number of members ( totalMembers ) I use: 要检索成员总数( totalMembers ),请使用:

     SELECT COUNT(DISTINCT `id`) AS `totalMembers` FROM `tmc_users`; 
  3. To get a percentage value ( totalPercent ) of members who have attended across the total members, I use PHP to make the two queries and then calculate like so: 为了获得已参加所有成员的成员的百分比值totalPercent ),我使用PHP进行了两个查询,然后进行如下计算:

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

I've tried combining the two queries and the percentage calculation in a similar way to below, with no luck: 我尝试以下面类似的方式结合两个查询和百分比计算,但是没有运气:

    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;

I also tried expanding out the columns: 我还尝试扩展列:

    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;

This gives me the error: 这给了我错误:

Error code: 1054. Unknown column 'g.event_id' in 'on clause' 错误代码:1054。“ on子句”中的未知列“ g.event_id”

How can I combine these SQL/PHP queries/calculations into one SQL query? 如何将这些SQL / PHP查询/计算组合到一个SQL查询中?

You could use subquery: 您可以使用子查询:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM