mysql去重欄位 mysql多字段去重,並計數

2021-10-17 12:18:21 字數 2918 閱讀 8730

問 題

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僅為實現的你展示的結果:

掃一掃關注it屋

MySQL去重顯示指定字段資訊

在使用mysql的select distinct name from table語句時,輸出的只是去重之後name欄位的資訊,而希望的是能夠輸出考生id 考試時間 考試成績等的資訊。使用?1 select distinct name,sorce from table 結果發現去重不起作用,因為mys...

mysql根據多個欄位去重

現在在搞資料處理,裡面有個資料是根據兩個欄位來區別是不是一樣的,那如果在設計的時候沒有將那兩個字段設計成唯一主鍵,或者唯一索引,後續就要進行去重,上網查了好久,發現都沒有啥好的解決方法,後來想了下,將那兩個主鍵連線一下,然後group分組不就行了?雖然效能很弱雞,但是這個sql我又只是用一次而已。s...

mysql 去重方式

distinct group by 不能與order by一起使用,細節看執行計畫 exists 某些地方推薦,資料越多越好用 對下面這條語句去重,查詢資料多時優化,資料多不推薦 select 1 from a r a left join t a m b on a.id b.pid left joi...