用于SUMing多个COUNT的UNION语法

时间:2012-10-10 16:23:54

标签: mysql count sum union

这些查询可单独运作。如何将UNION编写为SUM所有结果?

SELECT SUM(players) FROM `tournament_players` FROM (
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p1_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p2_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p3_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p4_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
)

2 个答案:

答案 0 :(得分:4)

您走在正确的轨道上,但附加了FROM个关键字。试试这个:

SELECT SUM(players) FROM (
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p1_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p2_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p3_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
UNION
SELECT COUNT(*) as `players` FROM `tournament_players` WHERE `foursome_1_p4_name` IS NOT NULL AND `tournament` BETWEEN 13 AND 17 AND flight = '8 AM'
) `tournament players`

答案 1 :(得分:1)

听起来你只想要这个,将你的个人查询放在子查询中以获得sum()

SELECT SUM(players) 
FROM 
(
    SELECT COUNT(*) as `players` 
    FROM `tournament_players` 
    WHERE `foursome_1_p1_name` IS NOT NULL 
        AND `tournament` BETWEEN 13 AND 17 
        AND flight = '8 AM'
    UNION
    SELECT COUNT(*) as `players` 
    FROM `tournament_players` 
    WHERE `foursome_1_p2_name` IS NOT NULL 
        AND `tournament` BETWEEN 13 AND 17 
        AND flight = '8 AM'
    UNION
    SELECT COUNT(*) as `players` 
    FROM `tournament_players` 
    WHERE `foursome_1_p3_name` IS NOT NULL 
        AND `tournament` BETWEEN 13 AND 17 
        AND flight = '8 AM'
    UNION
    SELECT COUNT(*) as `players` 
    FROM `tournament_players` 
    WHERE `foursome_1_p4_name` IS NOT NULL 
        AND `tournament` BETWEEN 13 AND 17 
        AND flight = '8 AM'
) x -- place your alias here