如果我打字
SELECT petid1, COUNT( * ) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1
ORDER BY total DESC它将输出以下数据

如果我打字
SELECT petid2, COUNT( * ) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2
ORDER BY total DESC它将输出以下数据

我怎么能分组相同的是结果?例如petid1=1218总结果+ petid2=1218总结果=20+9=29
发布于 2014-07-21 16:54:38
加入结果查询并合并总计。不确定您使用的是哪个数据库,但应该如下所示:
SELECT petid1, petid2, (a.total + b.total) as combinedtotal
FROM
(SELECT petid1, COUNT( * ) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1) a
INNER JOIN
(SELECT petid2, COUNT( * ) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2) b
ON a.petid1 = b.petid2
ORDER BY combinedtotal DESC这将只返回那些具有匹配的petid1和petid2的记录,因此在您的示例中,id的1240和995不会显示。如果希望显示这些记录,请将联接更改为完全连接。
发布于 2014-07-21 16:51:18
您已经有了正在尝试组合的两个输出。因为这是两个独立的信息,所以您需要在您的问题中使用这两个查询。通过使用union all,您可以将它们组合成一个表。
SELECT petid1 as petid, COUNT( * ) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1
Union all
SELECT petid2 as petid, COUNT( * ) AS total FROM cdc_padchat WHERE petid2 !=0 GROUP BY petid2此查询的输出将是
请愿书-共计1218 - 20,9102 - 18 - 995 - 10,1238 -9,1217 -x-9,912 -x-9,1212-8- 10,1218 -9 1218-9 1238 -8,1240 -6,1217 -5
现在,为了将petid组合起来,您需要将上面的查询变成子查询,并将组移动到外部查询。
Select petid, count(*) as total
From(
SELECT petid1 as petid FROM cdc_padchat WHERE petid1 !=0
Union all
SELECT petid2 as petid FROM cdc_padchat WHERE petid2 !=0
)
GROUP BY petid
Order by total desc这应该会给你你想要的东西。
https://stackoverflow.com/questions/24869966
复制相似问题