gpt4 book ai didi

mysql - 在不使用表连接的情况下计算按 ID 分组的匹配评级?是否可以?数据库?

转载 作者:行者123 更新时间:2023-11-29 06:10:44 25 4
gpt4 key购买 nike

我有一个名为 ratingsPerId 的中间表,它是从此处显示的存储过程生成的:

Id   Rating
'1', 'low'
'1', 'low'
'1', 'low'
'1', 'low'
'1', 'low'
'2', 'medium'
'2', 'medium'
'2', 'medium'
'2', 'high'
'2', 'high'
'4', 'high'
'4', 'high'
'4', 'high'
'4', 'high'
'4', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'
'9', 'high'

我想要的是 Id 1,计算所有低点、中点、高点。并对以下所有 Id 2、4、9 等执行相同操作...

现在我有一个表连接,它计算每个 ID 的高点和低点:

drop temporary table if exists t1, t2;
create temporary table t1(ruleid int, high INT);
INSERT into t1(
SELECT ruleid, count(*) AS High from ratingsPerRuleId WHERE rating='high' group by ruleid);
create temporary table t2(ruleid int, low int);
INSERT into t2(
SELECT ruleid, count(*) AS Low from ratingsPerRuleId WHERE rating='low' group by ruleid);

SELECT t1.RuleID, t1.high, t2.low from t1 left join t2 on t1.ruleid=t2.ruleid ;

ID High Low
1 NULL 5
2 2 NULL
4 5 NULL
9 9 NULL

如您所见,我需要为 Medium 创建第三个表并连接它以获得 Medium 列。

在 MYSQL 中有更简单的方法吗?我觉得有一个简单的语句可以完成这个,我的小表的杂乱表连接不是必需的,但我对 MYSQL 的了解还不够多,无法得到答案。

我查看了 Count(distinct) 和 Select Distinct,但没有找到答案。

谢谢!

最佳答案

我猜你需要使用 CASE WHEN 表达式。

SELECT 
Id,
COUNT(CASE WHEN Rating ='high' THEN 1 END) AS high,
COUNT(CASE WHEN Rating ='medium' THEN 1 END) AS medium,
COUNT(CASE WHEN Rating ='low' THEN 1 END) AS low
FROM your_table
GROUP BY Id;

Working Demo

OR 如果您不想使用 CASE WHEN,则可以将 SUMMySQL bool 表达式 一起使用>.

SELECT 
Id,
SUM(Rating ='high') AS high,
SUM(Rating ='medium') AS medium,
SUM(Rating ='low') AS low
FROM your_table
GROUP BY Id;

Working Demo

注意: SELECT SUM(a=b) 仅在 a=b 时返回 1;

注意: 工作演示中使用了以下示例输入

| Id | Rating |
|----|--------|
| 1 | low |
| 1 | low |
| 1 | medium |
| 1 | high |
| 2 | high |

关于mysql - 在不使用表连接的情况下计算按 ID 分组的匹配评级?是否可以?数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com