首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql组数据?合并?

Sql组数据?合并?
EN

Stack Overflow用户
提问于 2014-07-21 16:24:36
回答 2查看 43关注 0票数 0

如果我打字

代码语言:javascript
复制
SELECT petid1, COUNT( * ) AS total FROM cdc_padchat WHERE petid1 !=0 GROUP BY petid1
ORDER BY total DESC

它将输出以下数据

如果我打字

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-21 16:54:38

加入结果查询并合并总计。不确定您使用的是哪个数据库,但应该如下所示:

代码语言:javascript
复制
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不会显示。如果希望显示这些记录,请将联接更改为完全连接。

票数 1
EN

Stack Overflow用户

发布于 2014-07-21 16:51:18

您已经有了正在尝试组合的两个输出。因为这是两个独立的信息,所以您需要在您的问题中使用这两个查询。通过使用union all,您可以将它们组合成一个表。

代码语言:javascript
复制
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组合起来,您需要将上面的查询变成子查询,并将组移动到外部查询。

代码语言:javascript
复制
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

这应该会给你你想要的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24869966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档