添加:
SQL查询:
SELECT s.name
, d.feeling
, COUNT(1) AS times
FROM data_table d
, staff s
WHERE d.nid = s.id
AND d.project_id = 1
AND d.crawl_time BETWEEN '2018-10-17' AND '2018-10-24'
AND LENGTH(TRIM(d.feeling)) > 0
GROUP
BY d.nid
, d.feeling
添加(END)
我编写了一个sql,以按名称和感觉查询每个身体的感觉组的时间。这是结果。
-- a certain sql returns, not an existing table --
`name` `feeling` `times` (expect)
Jack happy 10 0.45
Jack sad 7 0.31
Jack common 5 0.22
Lily happy 3 0.27
Lily sad 6 0.54
Lily common 2 0.18
Sam happy 6 0.42
Sam sad 7 0.5
Sam common 1 0.07
现在的目的是计算每个人的感觉比例。例如,杰克的幸福感占10/(10+7+5)
的情感,而悲伤的情感是7/(10+7+5)
。
使用SUM(result.count)
和GROUP BY name
进行计算时,无法显示悲伤或普通的感觉。然后,我使用子查询,但该表不存在。反正有没有创建视图的工作吗?
答案 0 :(得分:1)
一种适用于任何MySQL版本的解决方案使用子查询为每个名称找到times
的总和,然后加入该子查询:
SELECT
t1.name,
t1.feeling,
t1.times,
t1.times / t2.times_sum AS feeling_ratio
FROM yourTable t1
INNER JOIN
(
SELECT name, SUM(times) AS times_sum
FROM yourTable
GROUP BY name
) t2
ON t1.name = t2.name;
如果您使用的是MySQL 8+或更高版本,并且可以使用分析功能,则可以使用以下更简单的方式编写此代码:
SELECT
t1.name,
t1.feeling,
t1.times,
t1.times / SUM(t1.times) OVER (PARTITION BY t1.name) AS feeling_ratio
FROM yourTable t1;