【问题标题】:Get row with certain value from aggregate group, if a row with this value exists如果存在具有该值的行,则从聚合组中获取具有特定值的行
【发布时间】:2014-09-01 15:14:34
【问题描述】:

我有一个表,我正在 A 列上执行 GROUP_CONCAT,其中包含哈希值。组合在一起的每一行都可以在 B 列中包含不同的值。假设 B 列可以包含“是”或“否”。

如果该组中有“是”和“否”的行,我想将“是”作为 B 列分组的结果。如果我什么都不做,根据文档,我会得到一个B 列的随机结果。

我还没有找到接受固定值/字符串的聚合函数。函数 FIXED_VALUE 是我希望看到的不存在的聚合函数。

+--------+---------+
|  hash  |  yes_no |
+--------+---------+
| 111111 |    yes  |
| 111111 |    no   |
| 111111 |    no   |
| 222222 |    no   |
| 222222 |    no   |
+--------+---------+

SELECT FIXED_VALUE(yes_no='yes') FROM my_table GROUP BY hash

【问题讨论】:

  • 你能发布一些数据和你所做的尝试吗?
  • 刚刚添加了更多细节。谢谢!
  • mysql 中没有名为 FIXED_VALUE 的函数。看看我发布的答案我还发布了一个演示它的工作。
  • 我刚刚用更好的方法编辑了我的答案。只需在 yes_no 上使用 MAX() 聚合

标签: mysql group-by aggregate-functions


【解决方案1】:

尝试做这样的事情。

SELECT
    GROUP_CONCAT(hash) as hash,
    MAX(yes_no) as yes_no
FROM table

DEMO

【讨论】:

  • 是的,我知道 FIXED_VALUE 不存在。就像我说的,这只是我想要的一个功能。 MAX() 解决方案的问题在于它被认为是数字。所以碰巧它也可能计算出对字符串有用的东西。但是如果我不仅有两个值,这个函数是没用的。 “是”/“否”只是一个例子。
  • @Bernd 我需要更好地了解您想要显示的内容,例如字符串的内容......是否超过两个?每个人的顺序是什么?
  • 约翰,感谢您的回复。重要的一点是:如果它存在,我希望采用某个值。如果我不选择某个值,根据文档,我最终会得到一个未定义的结果。这意味着所有可用值中的任何一个都可能被视为结果。我的真实情况如下(我之前只是想简化一下):我有 3 个值:“pref_go”、“pref_nogo”、“on”。分组时,一个组中只能同时出现“pref_go”和“on”。但是当它们确实存在时,我需要确保采用“pref_go”(而不是“on”)。谢谢!
猜你喜欢
  • 2022-01-20
  • 2020-01-14
  • 2018-05-09
  • 2021-09-17
  • 1970-01-01
  • 2023-04-02
  • 2018-01-05
  • 1970-01-01
  • 2022-10-26
相关资源
最近更新 更多