2012-07-01 191 views
3

这是我的查询MySQL COUNT(*)GROUP BY HANDING COUNT =?

SELECT COUNT(*) as total, toys, date FROM T1 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
UNION 
SELECT COUNT(*) as total, toys, date FROM T2 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
UNION 
SELECT COUNT(*) as total, toys, date FROM T3 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
GROUP BY RoomType 
HAVING COUNT(total) = 4 

输出结果

count Toys   date 
3 Bibi  2012-06-26 
4 Baba   2012-06-26 

我怎样才能让MySQL只显示计数= 4

回答

4
SELECT * FROM (
    SELECT COUNT(*) as total, toys, date FROM T1 
    WHERE (date >= '2012-06-26' AND date < '2012-06-30') AND (Avail > '0') 
    GROUP BY RoomType 
    UNION 
    SELECT COUNT(*) as total, toys, date FROM T2 
    WHERE (date >= '2012-06-26' AND date < '2012-06-30') AND (Avail > '0') 
    GROUP BY RoomType 
    UNION 
    SELECT COUNT(*) as total, toys, date FROM T3 
    WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
    GROUP BY RoomType) AS src 
WHERE total = 4; 

请,请注意,对于正确的数据groupping结果您必须必须具有GROUP BY子句中的所有列或作为聚合函数的参数。 MySQL允许您避免这种限制,但它可能会导致您意想不到的结果。

4

您需要先按组合然后合并结果。

SELECT COUNT(*) as total, toys, date FROM T1 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
GROUP BY RoomType HAVING COUNT(*) = 4 
UNION 
SELECT COUNT(*) as total, toys, date FROM T2 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
GROUP BY RoomType HAVING COUNT(*) = 4 
UNION 
SELECT COUNT(*) as total, toys, date FROM T3 
WHERE (date >= '2012-06-26'AND date < '2012-06-30') AND (Avail > '0') 
GROUP BY RoomType HAVING COUNT(*) = 4 
+0

谢谢oooooooooooooooooooo你是最棒的!!!!!!!!!!!!!!!!! – user1478893