0

嗨,我试图计算相同值的行数,

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

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

4

2 回答 2

0
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上的示例

另请参阅:强制 MySQL 从 WHERE IN 子句返回重复项而不使用 JOIN/UNION?

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

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

于 2013-01-30T08:25:48.920 回答
0

试试看:

  SELECT value, count(value) AS Count 
  FROM mytable m
    WHERE value = m.value
    GROUP BY value
于 2013-01-30T08:16:18.010 回答