我需要结合以下查询的结果。我需要将内部和外部的总消息一起处理。让我来解释查询和数据对他们MYSQL结合多个子查询的结果
样本数据:
+---------------------+---------------------+----------------+---------------+----------------+
| deviceCustomString2 | destinationUserName | deviceHostName | deviceProduct | sourceUserName |
+---------------------+---------------------+----------------+---------------+----------------+
| <FD54> | [email protected] | gemslab385mb | Test Server | Exchange |
| <FX54> | [email protected] | gemslabcht | Test Server | Exchange |
| <FZ54> | [email protected] | gemslab385mb | Test Server | External |
| <FA54> | [email protected] | gemslab385mb | Test Server | Exchange |
| <FD54> | [email protected] | gemslab385mb | Test Server | Exchange |
+---------------------+---------------------+----------------+---------------+----------------+
查询1:
SELECT
LEFT((LOWER(SUBSTRING_INDEX(b.deviceHostName,'.',1))),(LENGTH(SUBSTRING_INDEX(b.deviceHostName,'.',1))-2)) as "Device_Group",
COUNT(b.deviceCustomString2) as "Total_Messages_Processed_EXTERNAL"
FROM
(SELECT
TEST2.deviceCustomString2,
TEST2.deviceHostName
FROM
TEST2
WHERE
TEST2.deviceProduct="Test Server"
AND
(TEST2.destinationUserName NOT LIKE '%dmroot.net%'
AND TEST2.destinationUserName NOT LIKE '%banco2%'
AND TEST2.sourceUserName NOT LIKE '%Exchange%')
GROUP BY
TEST2.deviceCustomString2,
TEST2.deviceHostName
) as b
查询1结果:
+--------------+-----------------------------------+
| Device_Group | Total_Messages_Processed_EXTERNAL |
+--------------+-----------------------------------+
| gemslab385 | 1 |
+--------------+-----------------------------------+
QUERY2:
SELECT
LEFT((LOWER(SUBSTRING_INDEX(a.deviceHostName,'.',1))),(LENGTH(SUBSTRING_INDEX(a.deviceHostName,'.',1))-2)) as "Device_Group",
COUNT(a.deviceCustomString2) as "Total_Messages_Processed_INTERNAL"
FROM
(SELECT
TEST2.deviceCustomString2,
TEST2.deviceHostName
FROM
TEST2
WHERE
TEST2.deviceProduct="Test Server"
AND
(
TEST2.destinationUserName LIKE '%dmroot.net%'
OR TEST2.sourceUserName LIKE '%Exchange%'
)
GROUP BY
TEST2.deviceCustomString2
) as a
GROUP BY
Device_group
查询2结果:从两个查询
+--------------+-----------------------------------+
| Device_Group | Total_Messages_Processed_INTERNAL |
+--------------+-----------------------------------+
| gemslab385 | 2 |
| gemslabc | 1 |
+--------------+-----------------------------------+
结果都很好,并删除重复记录。
现在,当我添加UNION ALL 2个查询之间我得到这样的结果
+--------------+-----------------------------------+
| Device_Group | Total_Messages_Processed_EXTERNAL |
+--------------+-----------------------------------+
| gemslab385 | 1 |
| gemslab385 | 2 |
| gemslabc | 1 |
+--------------+-----------------------------------+
总量是正确的,但不能显示TOTAL_MESSAGES_PROCESSED_INTERNAL。我如何使它输出如下:
+--------------+-----------------------------------+-----------------------------------+
| Device_Group | Total_Messages_Processed_INTERNAL | Total_Messages_Processed_EXTERNAL |
+--------------+-----------------------------------+-----------------------------------+
| gemslab385 | 2 | 1 |
| gemslabc | 1 | |
+--------------+-----------------------------------+-----------------------------------+
在此先感谢您的帮助。
Marcello
只需尝试UNION DISTINCT而不是UNION ALL。 – Vijay 2011-03-15 05:14:21