嗨,我试图计算相同值的行数,
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
谢谢,任何帮助将不胜感激
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 参数的计数相关联。
试试看:
SELECT value, count(value) AS Count
FROM mytable m
WHERE value = m.value
GROUP BY value