2014-11-12 6 views
0

У меня есть поле, содержащее версии, значения немного разные и никогда не заполняются, поэтому у меня есть значения, такие как 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

до версии 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. ;)

0

Это очень просто в MySQL. Просто используйте substring_index():

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

Это дает результаты на отдельных строках, а не в отдельных столбцах. Чтобы получить результаты в отдельных столбцах, потребуется выполнить динамический поворот.

Смежные вопросы