2012-10-24 41 views
4

我有两个要结合到单个输出的查询,我不能使用UNIOn,因为它们有不同数量的列。结合使用不同列数的两个查询

该表是ref与字段idrefidcellidcat它们都含有整数

查询1:查找行的总数目为每个唯一cellid

SELECT cellid, COUNT(*) totalcount, cat FROM rel GROUP BY cellid 

查询2:查找模式(最常见的值)cat每个独特cellid

SELECT cellid, cat 
FROM rel t 
GROUP BY cellid, cat 
HAVING cat = (
SELECT cat 
FROM rel 
WHERE cellid = t.cellid 
GROUP BY cat 
ORDER BY COUNT(*) DESC, cat 
LIMIT 1 
) 

举的什么,我试图做我想查询我的桌子

id | refid | cellid | cat 
1 | 1  | 1  | 1 
2 | 2  | 2  | 2 
3 | 3  | 3  | 4 
4 | 1  | 1  | 2 
5 | 2  | 1  | 2 
6 | 3  | 1  | 3 
7 | 1  | 2  | 2 
8 | 1  | 1  | 2 

,并返回

cellid | no_of_rows | Mode_of_cat 
1  | 5   | 2 
2  | 2   | 2 
3  | 1   | 4 

回答

5

这里最简单的解决方案就是编写一个查询来加入你已经拥有的两个结果集。您可以将查询结果存储在tmp表格中,并像下面这样加入临时表格:

SELECT tmp1.cellid, tmp1.rows, tmp2.mode_cat FROM 
(
    SELECT cellid, COUNT(*) AS rows 
    FROM rel 
    GROUP BY cellid 
)tmp1 
LEFT JOIN 
(
    SELECT cellid, cat AS mode_cat 
    FROM rel t 
    GROUP BY cellid, cat 
    HAVING cat = (
     SELECT cat 
     FROM rel 
     WHERE cellid = t.cellid 
     GROUP BY cat 
     ORDER BY COUNT(*) DESC, cat 
     LIMIT 1 
    ) 
)tmp2 
ON tmp1.cellid = tmp2.cellid; 
3

在第二个查询的例子,你可以改变

SELECT cellid, cat 

SELECT cellid, 0 as totalcount, cat 

以使其与第一个查询中的列匹配。