【问题标题】:Search within GROUP_CONCAT在 GROUP_CONCAT 内搜索
【发布时间】:2015-11-09 12:48:50
【问题描述】:

我正在从大量行结果中执行此 SQL

选择用户 ID,group_concat(locationid) 来自user_location 按用户 ID 分组 有 group_concat(locationid) = 10

userid  locationid
---------  ----------
894801  10,10,10,10,10,10,10,10,10,10,10,10
898356  10,10,11,10
900424  10,10,13,12,12,12,12
902123  10
904910  10,10
907922  10,10,10
912587  10,12,12
930319  10

现在,我只想要那些 value = 10 而没有其他值的 locationid 行

所需的输出:

userid  locationid
---------  ----------
894801  10,10,10,10,10,10,10,10,10,10,10,10
902123  10
904910  10,10
907922  10,10,10
930319  10

我探索并找到了find_in_set(),但在这里没有用

【问题讨论】:

    标签: mysql sql group-by group-concat


    【解决方案1】:

    不要使用来自group_concat() 的结果。只需使用简单的having 子句:

    SELECT userid, group_concat(locationid)
    FROM user_location
    GROUP BY userid 
    HAVING SUM(locationid = 10) = COUNT(*)
    

    SUM() 计算等于10 的值的数量。 = COUNT(*) 简单地说都是 10。

    您也可以通过确保没有任何值不是 10 来做到这一点:

    HAVING SUM(locationid <> 10) = 0
    

    【讨论】:

    • 它的要求有点不同。而且和你的答案不符。
    • @MySQLRockstar 。 . .我懂了。我最初误解了这个问题。
    • 感谢这个工作SELECT userid, locationid FROM abpm_user_plan_mapping GROUP BY userid HAVING SUM(locationid = 10) = COUNT(*)
    【解决方案2】:
    SELECT * FROM user_location WHERE userid not in (select userid from user_location where locationid<>10) 
    group by userid having locationid=10;
    

    试试这个..它的工作原理

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2011-04-17
      • 1970-01-01
      • 2016-03-14
      • 2016-05-02
      • 2011-06-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多