mysql如何统计某数据第几次重复出现:
当符合条件如:空调格列为是,车牌号在该列第一次出现,则统计为1;空调格列为是,车牌号第二次出现,则统计为2,空调格列为否,则统一为0,要如何实现:
excel中采用的公式如下:
SELECT
car_number,
IF(is_air_conditioner = '是', @rownum := IF((SELECT COUNT(*) FROM your_table t2 WHERE t2.car_number = your_table.car_number AND t2.is_air_conditioner = '是' AND t2.id <= your_table.id) = 1, 1, @rownum + 1), 0) AS repeat_times
FROM
your_table,
(SELECT @rownum := 0) r
ORDER BY
car_number, id;
提供一些测试数据
你的MySQL版本是多少,如果是MySQL8的话可以使用:
SELECT *,
CASE WHEN 空调格 = '是' THEN
ROW_NUMBER() OVER (PARTITION BY 车牌号, 空调格 ORDER BY 维修单号)
ELSE
0
END AS 重复次数
FROM
表名;
方式很多 order by就行
审题:想选几本关于数据的还不错的书看看,发现销量高的在豆瓣上大家对书的评分不一定好,但豆瓣关键词搜索又没有评分排序功能,还得考虑评论人数的影响,这样一个个看太慢
目标页面:豆瓣、关键词数据搜索
目标信息:评分、评论人数、图书链接
实施方案:利用爬取工具八爪鱼,实现数据快速抓取,并导出Excel进行快速筛选;也可以导入Mysql数据库作为本示例的一个拓展。
我可以提供如下MySQL解决方案:
根据问题描述,需要统计特定条件下某数据的重复次数,具体情况是,当空调格列为“是”且车牌号在该列第一次出现时,计数为1,当空调格列为“是”且车牌号在该列第二次出现时,计数为2,当空调格列为“否”时,计数为0。
解决方案如下:
CREATE TABLE `car_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`license_plate` varchar(10) NOT NULL,
`air_conditioner` enum('是','否') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
DELIMITER $$
CREATE PROCEDURE `count_car` (
IN lp VARCHAR(10),
OUT cnt INT
)
BEGIN
DECLARE cur_cnt INT DEFAULT 0;
SELECT COUNT(*) INTO cur_cnt FROM `car_info` WHERE `license_plate` = lp AND `air_conditioner` = '是';
IF cur_cnt = 1 THEN
SET cnt = 1;
ELSEIF cur_cnt = 2 THEN
SET cnt = 2;
ELSE
SET cnt = 0;
END IF;
END$$
DELIMITER ;
SET @cnt := 0;
CALL `count_car`('京A12345', @cnt);
SELECT @cnt;
其中'京A12345'为需要计数的车牌号,@cnt为输出参数,最后一句SELECT语句用来查询计数结果。
希望以上解决方案对您有所帮助。