首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将分组计数按

如何将分组计数按
EN

Stack Overflow用户
提问于 2019-09-13 08:21:50
回答 2查看 135关注 0票数 0

我有三张桌子:

代码语言:javascript
复制
user 1 - n (user_id)feedback(type_id) n - 1 word

用户:

代码语言:javascript
复制
id name
1  name1
2  name2
3  name3
4  name4
5  name5
6  name6

反馈:

代码语言:javascript
复制
id   user_id   type_id   title
1    1         1         title1
2    1         1         title2
3    1         2         title3
4    2         1         title4
5    2         2         title5
6    2         2         title6
7    2         1         title7

字:

代码语言:javascript
复制
id   name         category
1    great work   FEEDBACK_TYPE
2    good work    FEEDBACK_TYPE    

我试着用下面的查询来计算每个用户的反馈

结果:

代码语言:javascript
复制
user_id   countAllFeedback
1         3
2         4

查询

代码语言:javascript
复制
select
    feed.user_id,
    count(feed.id) as countAllFeedback
from
    feedback feed
group by
    feed.user_id;

我想按单词名称计算每个用户的反馈信息。

代码语言:javascript
复制
user_id   countAllFeedback   countGreatWorkFeedback   countGoodWorkFeedback
1         3                   2                       1
2         4                   2                       2

请帮我解决你的问题,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 09:09:53

您可以在下面的脚本中尝试此操作。由于您没有任何要从其他表动态收集的内容,因此不需要连接。您可以使用Type_ID作为CASE语句中的静态逻辑,因为这些语句是Word表中已知的列表。

代码语言:javascript
复制
SELECT A.user_id,
COUNT(*) countAllFeedback,
SUM(CASE WHEN A.type_id = 1 THEN 1 ELSE 0 END) countGreatWorkFeedback,
SUM(CASE WHEN A.type_id = 2 THEN 1 ELSE 0 END) countGoodWorkFeedback
FROM Feedback A
GROUP BY A.user_id

如果身份证有变化的可能性,你可以做以下几件事-

代码语言:javascript
复制
SELECT A.user_id,
COUNT(A.*) countAllFeedback,
SUM(CASE WHEN B.name = 'great work' THEN 1 ELSE 0 END) countGreatWorkFeedback,
SUM(CASE WHEN B.name = 'good work' THEN 1 ELSE 0 END) countGoodWorkFeedback
FROM Feedback A
INNER JOIN Word B ON A.type_id = B.id
GROUP BY A.user_id
票数 0
EN

Stack Overflow用户

发布于 2019-09-13 08:40:36

没有关联的用户表(按演示数据)

--这可以使用以下查询实现.

代码语言:javascript
复制
SELECT b.user_id,c.name, 
SUM(b.user_id) AS 'countAllFeedback',
SUM(CASE WHEN c.name='great work' THEN 1 ELSE 0 END) AS 'countGreatWorkFeedback',
SUM(CASE WHEN c.name='good work' THEN 1 ELSE 0 END) AS 'countGoodWorkFeedback'
FROM tbl_Feedback b
LEFT OUTER  JOIN
tbl_Word c
ON b.type_id=c.id
GROUP BY b.user_id,c.name

注:-这里我使用了带有和函数的Case语句

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

https://stackoverflow.com/questions/57919849

复制
相关文章

相似问题

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