SELECT a,b,count(*)
FROM t
GROUP BY rollup(a,b)
Run Code Online (Sandbox Code Playgroud)
结果:
a1, b1, 10
a1, b2, 90
a1, , 100
Run Code Online (Sandbox Code Playgroud)
我需要:
a1, b1, 10, 100
a1, b2, 90, 100
Run Code Online (Sandbox Code Playgroud)
怎么样?
我有这个问题:
SELECT `country`
FROM `geoip_base`
WHERE 1840344811 BETWEEN `start` AND `stop`
Run Code Online (Sandbox Code Playgroud)
它是使用索引(使用,但解析表的大部分)并且工作太慢.我试过使用ORDER BY和LIMIT,但它没有帮助.
"start <= 1840344811 AND 1840344811 <= stop"的工作方式类似.
CREATE TABLE IF NOT EXISTS `geoip_base` (
`start` decimal(10,0) NOT NULL,
`stop` decimal(10,0) NOT NULL,
`inetnum` char(33) collate utf8_bin NOT NULL,
`country` char(2) collate utf8_bin NOT NULL,
`city_id` int(11) NOT NULL,
PRIMARY KEY (`start`,`stop`),
UNIQUE KEY `start` (`start`),
UNIQUE KEY `stop` (`stop`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Run Code Online (Sandbox Code Playgroud)
表有57,424行.
解释查询"......按开始限制1开始和停止开始":使用键stop并获得24099行.没有顺序和限制,mysql不使用键并获取所有行.