【问题标题】:Count Duplicates with same id passing in one coulmn计算一列中传递的具有相同 ID 的重复项
【发布时间】:2013-01-30 08:06:31
【问题描述】:

您好,我正在尝试计算相同值的行数,

id,value
1 | a
2 | b
3 | c
4 | d
5 | e

我的查询是

select value, count(*) as Count from mytable  where id in('4','2','4','1','4') group by value having count(*) > 1

我的预期输出将是,

value,Count
 d |  3
 b |  1
 a |  1

谢谢,任何帮助将不胜感激

【问题讨论】:

    标签: mysql sql database count


    【解决方案1】:

    试试看:

      SELECT value, count(value) AS Count 
      FROM mytable m
        WHERE value = m.value
        GROUP BY value
    

    【讨论】:

    • 谢谢,但是当我将 id 值传递给它时它不会工作
    • 你确定你已经用id改变了所有出现的值吗?真的没有多少东西可以在这里失败......或者也许你的 id 是独一无二的,这就是混乱的来源?
    • 是的,我的 id 是唯一的,当我查询它时,它应该在特定的时间显示特定的计数,希望你能理解
    • 很遗憾我不确定你的意思
    【解决方案2】:
    SELECT t.id, t.value, COUNT(t.id) 
    FROM 
      test t
      JOIN 
        ( SELECT 1 AS id
          UNION ALL SELECT 3
          UNION ALL SELECT 3
          UNION ALL SELECT 4
          UNION ALL SELECT 1
          UNION ALL SELECT 1 ) AS tmp
        ON t.id = tmp.id
    GROUP BY t.id
    

    sqlfiddle.com 上的示例

    另见:Force MySQL to return duplicates from WHERE IN clause without using JOIN/UNION?

    当然,您的 IN 参数是动态的,因此您必须为 tmp 表生成相应的 SQL 语句。

    这是唯一的 SQL 方法。另一种可能性是让查询像您在问题中一样,然后以编程方式将行与传递给 IN 参数的计数相关联。

    【讨论】:

    • 感谢 Marvin,但这里我的 ID 值在范围内是动态的,它会相应变化,所以我如何在查询中传递 id 范围,
    • 我认为你必须从你的动态值生成内部 SELECT/UNION 子句,我真的没有看到另一种方法来做到这一点(或者在结果返回后以编程方式进行,见编辑答案)
    猜你喜欢
    • 2017-01-26
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2021-03-19
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多