mysql多字段去重,并计数

查看:1269
本文介绍了mysql多字段去重,并计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

Mysql版本5.5.42
有两个表,表结构与数据如下
1、goods表

CREATE TABLE `goods` (
  `id` int(10) unsigned NOT NULL,
  `product` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL,
  `size` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL,
  `color` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL,
  `status` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



INSERT INTO `goods` (`id`, `product`, `size`, `color`, `status`) VALUES
(8318, '1', '5', '11', '1'),
(8319, '1', '4', '11', '1'),
(8320, '1', '3', '11', '1'),
(8321, '1', '2', '11', '1'),
(8322, '2', '6', '81', '1'),
(8323, '2', '5', '81', '1'),
(8324, '2', '4', '81', '1'),
(8325, '2', '3', '81', '1'),
(8326, '2', '2', '81', '1'),
(8327, '2', '6', '32', '1'),
(8328, '2', '5', '32', '1'),
(8329, '2', '4', '32', '1'),
(8330, '2', '3', '32', '1'),
(8331, '2', '2', '32', '1'),
(8332, '1', '6', '32', '1'),
(8333, '1', '5', '32', '1'),
(8334, '1', '4', '32', '1'),
(8335, '1', '3', '32', '1');

2、product_colors表


CREATE TABLE `product_colors` (
  `id` int(10) unsigned NOT NULL,
  `product_code` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品代码',
  `color_code` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '颜色代码',
  `series_code` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '系列代码'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


INSERT INTO `product_colors` (`id`, `product_code`, `color_code`, `series_code`) VALUES
(13887, '1', '11', '114'),
(13888, '2', '81', '115'),
(13889, '2', '32', '108'),
(13889, '2', '31', '101'),
(13891, '3', '18', '117'),
(13892, '3', '32', '119'),
(13893, '1', '32', '114');

需求:要求查询出goods表中存在的product、颜色的series_code类别以及数量,相同颜色和产品为1个数量,不同尺寸不累计。
例子中的数据 查询出来 应该是
series_code 114 num 2
series_code 115 num 1
series_code 108 num 1
sql 语句该怎么写?
参考了下面的答案,下面这个sql能解决我的问题

select b.series_code,count(1) num 
from product_colors b 
where (b.product_code, b.color_code) in 
(select product, color from goods) 
group by b.series_code;

感谢所有回答我提问的朋友们。

解决方案

需求描述混乱,相同颜色和产品为一个数量,列举列子查询数据又把类别以及该类别的数量列出,按你列的结果来看,就是要取出现有商品goods中还有哪些产品颜色和类别嘛。。num还需要算吗?难不成你product_colors还会记录两条以上同样产品颜色类别的记录?一下sql仅为实现的你展示的结果:

select b.product_code, b.color_code,b.series_code,count(1) num 
from product_colors b 
where (b.product_code, b.color_code) in 
(select product, color from goods) 
group by b.product_code, b.color_code,b.series_code;

这篇关于mysql多字段去重,并计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆