我有三张桌子:
user 1 - n (user_id)feedback(type_id) n - 1 word用户:
id name
1 name1
2 name2
3 name3
4 name4
5 name5
6 name6反馈:
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字:
id name category
1 great work FEEDBACK_TYPE
2 good work FEEDBACK_TYPE 我试着用下面的查询来计算每个用户的反馈
结果:
user_id countAllFeedback
1 3
2 4查询
select
feed.user_id,
count(feed.id) as countAllFeedback
from
feedback feed
group by
feed.user_id;我想按单词名称计算每个用户的反馈信息。
user_id countAllFeedback countGreatWorkFeedback countGoodWorkFeedback
1 3 2 1
2 4 2 2请帮我解决你的问题,谢谢
发布于 2019-09-13 09:09:53
您可以在下面的脚本中尝试此操作。由于您没有任何要从其他表动态收集的内容,因此不需要连接。您可以使用Type_ID作为CASE语句中的静态逻辑,因为这些语句是Word表中已知的列表。
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如果身份证有变化的可能性,你可以做以下几件事-
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发布于 2019-09-13 08:40:36
没有关联的用户表(按演示数据)
--这可以使用以下查询实现.
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语句
https://stackoverflow.com/questions/57919849
复制相似问题