我有像
这样的表格声明CREATE TABLE my_foos (
id INT NOT NULL AUTO_INCREMENT,
bars SET('one', 'two', 'three', 'four', 'five') NOT NULL
)
值
1, ('one', 'two')
2, ('two')
3, ('three', 'four', 'five')
现在我想选择id和population count(也称为汉明重量)的条形码。
在我的例子中
SELECT id, POPCOUNT(bars)
FROM my_foos
将返回
1, 2
2, 1
3, 3
我需要做些什么来计算人口?
请不要在客户端回答如何执行此操作。我希望该解决方案也可以在WHERE,ORDER BY,HAVING等中使用。
答案 0 :(得分:4)
答案 1 :(得分:2)
我认为有很多方法可以解决这个问题,但我使用的方法就是这个,
CHAR_LENGTH(bars) - CHAR_LENGTH(REPLACE(bars, ',', '')) + 1
如果你愿意,你可以将其作为Function
DELIMITER $$
CREATE FUNCTION POPCOUNT(popList SET('one', 'two', 'three', 'four', 'five'))
RETURNS INT
BEGIN
RETURN CHAR_LENGTH(popList) - CHAR_LENGTH(REPLACE(popList, ',', '')) + 1;
END $$
DELIMITER ;
你可以称之为,
SELECT POPCOUNT(bars) FROM my_foos