You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MySQL语句筛选cool值大于uncool值的id?

用纯MySQL实现需求:筛选cool值大于uncool值的id

当然可以只用MySQL语句解决这个问题,不用额外编程语言处理!我来给你拆解思路和具体实现:

核心思路

我们需要对每个id分组,分别提取它对应的cool和uncool类型的value,然后直接比较这两个值的大小。用条件聚合就能完美实现这个逻辑。

具体SQL代码

SELECT id
FROM your_table_name -- 记得替换成你的实际表名
WHERE type IN ('cool', 'uncool') -- 过滤掉无关类型的行
GROUP BY id
HAVING MAX(CASE WHEN type = 'cool' THEN value END) > MAX(CASE WHEN type = 'uncool' THEN value END);

代码逐行解释

  • WHERE type IN ('cool', 'uncool'):先把none、unapp这些无关类型的数据过滤掉,只保留我们需要的两类,减少分组计算的开销。
  • GROUP BY id:按id分组,这样我们就能针对每个实体单独处理它的cool和uncool数值。
  • HAVING子句:
    • MAX(CASE WHEN type = 'cool' THEN value END):在当前id的分组里,提取type为cool的value(因为每个id的cool类型最多一条,用MAX/MIN/SUM都可以,MAX更稳妥,避免万一有重复数据的情况)。
    • 同理,MAX(CASE WHEN type = 'uncool' THEN value END)提取uncool类型的value。
    • 最后比较这两个值,只保留cool值大于uncool值的id。

验证结果

把你的表数据代入这个语句,会得到你预期的结果:

+------+
| id   |
+------+
| 2    |
| 3    |
+------+

可选优化:确保id同时存在两类数据

如果担心有些id可能只存在cool或只存在uncool类型,可以在HAVING里加个判断,确保两类数据都存在:

SELECT id
FROM your_table_name
WHERE type IN ('cool', 'uncool')
GROUP BY id
HAVING MAX(CASE WHEN type = 'cool' THEN value END) > MAX(CASE WHEN type = 'uncool' THEN value END)
   AND COUNT(DISTINCT type) = 2; -- 强制要求每个id同时有cool和uncool类型

这样就能精准筛选出符合要求的id了!

内容的提问来源于stack exchange,提问作者MCterra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:02:40