MySQL的。只计算我的列值的一部分

时间:2014-05-18 14:45:31

标签: mysql sql database

我有一个关于MySQL中的表的问题。为了更好地理解这一点,我宁愿告诉你。我有下表:

CREATE TABLE IF NOT EXISTS `tip_masina` (
  `id_tip` int(11) NOT NULL AUTO_INCREMENT,
  `marca` varchar(40) NOT NULL,
  `pret` int(11) NOT NULL,
  PRIMARY KEY (`id_tip`),
  UNIQUE KEY `marca` (`marca`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;


INSERT INTO `tip_masina` (`id_tip`, `marca`, `pret`) VALUES
(1, 'Chevrolet Impala', 8000),
(2, 'Chevrolet Camaro', 10000),
(3, 'Chevrolet Tahoe', 13000),
(4, 'Chevrolet Suburban', 12500),
(5, 'Chevrolet Cobalt', 4000),
(6, 'Dodge Charger', 14000),
(7, 'Dodge Avenger', 9000),
(8, 'Dodge Challenger', 6500),
(9, 'Dodge Dart', 3500),
(10, 'Dodge Durango', 3000),
(11, 'Ford Mustang', 7500),
(12, 'Ford Crown Victoria', 5000),
(13, 'Ford Focus', 4300),
(14, 'Ford Fiesta', 3700),
(15, 'Ford Escort', 1000);

我想要的是显示车辆类型和车辆数量,例如:

marca      |  no_of_vehicles
Chevrolet          5
Dodge              5
Ford               5

有没有办法在不将列marca分成两列的情况下执行此操作?

2 个答案:

答案 0 :(得分:4)

这是一种简单的方法,使用substring_index()

select substring_index(marca, ' ', 1) as marca, count(*)
from tip_masina
group by substring_index(marca, ' ', 1);

答案 1 :(得分:2)

最好分开马卡'分成两列,以便更容易找到你想要的。那时你不需要任何特殊功能(例如substring_index)。

编辑: 您可以使用以下代码:

EDIT2: 现在它可以工作(在mysql工作台上使用您的查询创建表进行测试):

START TRANSACTION;
ALTER TABLE tip_masina ADD model VARCHAR(60) AFTER marca;
ALTER TABLE tip_masina CHANGE marca company VARCHAR(60);
UPDATE tip_masina SET model = SUBSTRING_INDEX(company, ' ', -1);
ALTER TABLE tip_masina DROP INDEX marca;
UPDATE tip_masina SET company = SUBSTRING_INDEX(company, ' ', 1);
SELECT * FROM tip_masina;