//查詢表中的數(shù)據(jù) 同時(shí)某個(gè)字段不重復(fù) 并且排序
施甸網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),施甸網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為施甸上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的施甸做網(wǎng)站的公司定做!
首先做一下查詢某個(gè)字段不重復(fù)(使用group?by);
select?*?from 表名 where group?by 不重復(fù)的字段名;
在做一下排序,我之前有發(fā)過一次排序,這次就做一個(gè)簡(jiǎn)單排序
order?by 字段a=0?desc,?字段a desc,字段b desc (a字段等于0在最前面,a字段除了0之外的都為倒敘,b字段倒敘);
這樣組合起來就好了
select?*?from 表名 where group?by 不重復(fù)的字段名 order?by 字段a=0?desc,?字段a?desc,字段b?desc;
方案一:使用ignore關(guān)鍵字
如果是用主鍵primary或者唯一索引unique區(qū)分了記錄的唯一性,避免重復(fù)插入記錄可以使用:
insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999'),這樣當(dāng)有重復(fù)記
錄就會(huì)忽略,執(zhí)行后返回?cái)?shù)字0,還有個(gè)應(yīng)用就是復(fù)制表,避免重復(fù)記錄:
insert ignore into table(name) select name from table2
方案二:使用Replace
replace的語法格式為:
1. replace into table_name(col_name, ...) values(...)
2. replace into table_name(col_name, ...) select ...
3. replace into table_name set col_name=value, ...
算法說明:
REPLACE的運(yùn)行與INSERT很相像,但是如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,即:
1. 嘗試把新行插入到表中
2. 當(dāng)因?yàn)閷?duì)于主鍵或唯一關(guān)鍵字出現(xiàn)重復(fù)關(guān)鍵字錯(cuò)誤而造成插入失敗時(shí):
從表中刪除含有重復(fù)關(guān)鍵字值的沖突行
再次嘗試把新行插入到表中
舊記錄與新記錄有相同的值的判斷標(biāo)準(zhǔn)就是:表有一個(gè)PRIMARY KEY或UNIQUE索引,否則,使用一個(gè)REPLACE語句沒有意義
。該語句會(huì)與INSERT相同,因?yàn)闆]有索引被用于確定是否新行復(fù)制了其它的行。
返回值:
REPLACE語句會(huì)返回一個(gè)數(shù),來指示受影響的行的數(shù)目。該數(shù)是被刪除和被插入的行數(shù)的和。
受影響的行數(shù)可以容易地確定是否REPLACE只添加了一行,或者是否REPLACE也替換了其它行:檢查該數(shù)是否為1(添加)或
更大(替換)。
主鍵沒有著明確的概念定義,其是索引的一種,并且是唯一性索引的一種,且必須定義為“PRIMARY KEY”,主鍵不能重復(fù),一個(gè)表只能有一個(gè)主鍵。
1、聲明主鍵的方法:
您可以在創(chuàng)建表的時(shí)候就為表加上主鍵,如:
CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));
也可以更新表結(jié)構(gòu)時(shí)為表加上主鍵,如:
ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);
/*
創(chuàng)建一個(gè)qq表,將qq_id設(shè)為主鍵,且沒有對(duì)其進(jìn)行NOT NULl約束
*/
create table qq(
qq_id int(10),
nick_name varchar(255) not null,
primary key (qq_id))
/*
插入一條數(shù)據(jù),將qq號(hào)設(shè)為10000(咱也幻想一下),昵稱設(shè)為"simaopig"
*/
INSERT INTO qq( qq_id, nick_name )
VALUES (
'10000', 'simaopig');
2、示例
主鍵被認(rèn)為是NOT NULL和UNIQUE約束最好的結(jié)合。如果這些列沒有被明確地定義為NOT NULL,MySQL會(huì)隱含地定義這些列。
3、主鍵也是索引:
剛才已經(jīng)說了,主鍵其實(shí)也是索引,甚至在MySQL的術(shù)語里面“鍵”就等于“索引”,所以“外鍵”一定要先設(shè)為“索引”。所以主鍵也應(yīng)該和索引一樣,既可以作用于單獨(dú)的字段,又可以作用于多個(gè)字段。
舉個(gè)簡(jiǎn)的例子吧,我住3單元,501室,我叫小小子,那么只有3單元501室才能在本小區(qū)表里面唯一確定我家。因?yàn)?單元,501室住著的可能也是個(gè)小小子,所以只有兩個(gè)字段才能唯一確定我,也就是說可以二者組合作為主鍵。組合的主鍵,每個(gè)列都會(huì)隱含定義NOT NULL約束,且其二者加在一起被定義了UNIQUE 惟一約束。
/*
創(chuàng)建防火墻表,將host 和port組合設(shè)為主鍵,注意我沒有將port設(shè)NOT NULL約束
*/
create table firewall(
host varchar(11) not null,
port smallint(4),
access enum('deny', 'allow') not null,
primary key (host,port))
/*
插入一條新的記錄,沒有啥問題
1 row(s) inserted.
*/
INSERT INTO firewall (
host ,
port ,
access)
VALUES (
'202.65.3.87', '21', 'deny');
計(jì)數(shù)不重復(fù)方法如下:
分組是必須的,在分組的情況下對(duì)符合條件的CLASS進(jìn)行整個(gè)的不重復(fù)計(jì)數(shù)。
或者能先把CLASS這一列去掉,能在查詢中再插一列做為新列也行要么不加WorkSubstance分組,只COUNT,要么不去count(DistinctClass),直接COUNTselectcount(DistinctClass)asClassfromClassDatewhereMachine='020-C03'andDateTime='2014-7-18'。