按字符串格式按字段分组

时间:2014-11-12 18:51:25

标签: mysql sql group-by

我有一个包含版本的字段,值有点不同,并且永远不会满,所以我有5.0.1.1255,4.2.2,4.2.x,4.0,4.x等值。我不确定我想要的是不是很有可能,但我想得到每个点版本的计数,所以我想知道有多少5.0,4.2,4.0但版本将是动态的,所以有一天会有一个5.1,5.2等。

例如,手动让我可以做:

SELECT
    (SELECT COUNT(*) as num FROM ticket_meta m WHERE m.product_version LIKE "4.1%") as ext_4_1,
    (SELECT COUNT(*) as num FROM ticket_meta m WHERE m.product_version LIKE "4.2%") as ext_4_2

但我当然要不断更新该查询。有没有办法让这更加自动化?

2 个答案:

答案 0 :(得分:2)

最高版本9.9,此脚本应该可以工作:

SELECT LEFT(product_version, 3) Version, COUNT(*) as Quantity
FROM ticket_meta
WHERE product_version
GROUP BY LEFT(product_version, 3)

这适用于T-SQL,但我认为它应该起作用,或者至少与MySQL非常相似。

如果您确实需要这些值作为列而不是行,则应该使用数据透视表。

PS:我打赌那些是Ext JS版本。 ;)

答案 1 :(得分:0)

这在MySQL中很容易。只需使用substring_index()

select substring_index(version, '.', 2) as MajorMinor, count(*)
from tickeet_meta
group by MajorMinor;

这会在单独的行上生成结果,而不是在单独的列中生成结果。要在单独的列中获得结果,需要进行动态调整。