日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列?

發(fā)布時(shí)間:2023/12/2 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

你正在尋找一個(gè)組:

select * from table group by field1

偶爾可以寫(xiě)一個(gè)獨(dú)特的聲明:

select distinct on field1 * from table

然而,在大多數(shù)平臺(tái)上,上述兩者都不會(huì)起作用,因?yàn)槠渌猩系男袨槭俏粗付ǖ摹?(MySQL中的第一個(gè)作品,如果這就是你使用的。)

你可以獲取不同的字段,并堅(jiān)持每次select一個(gè)任意的行。

在某些平臺(tái)上(例如PostgreSQL,Oracle,T-SQL),可以直接使用窗口函數(shù)完成:

select * from ( select *, row_number() over (partition by field1 order by field2) as row_number from table ) as rows where row_number = 1

在其他人(MySQL,SQLite)上,你需要編寫(xiě)子查詢(xún),使你能夠自己join整個(gè)表( 例子 ),所以不推薦。

從你的問(wèn)題的措辭,我明白,你要為給定的字段select不同的值,并為每個(gè)這樣的值列出同一行中的所有其他列值。 大多數(shù)DBMS不會(huì)同時(shí)使用DISTINCT和GROUP BY ,因?yàn)榻Y(jié)果不確定。

可以這樣想:如果你的field1不止一次出現(xiàn), field2值將被列出(假設(shè)你在兩行中的field1有相同的值,但在這兩行中有兩個(gè)不同的field2值)。

但是,您可以使用聚合函數(shù)(顯式地為每個(gè)要顯示的字段)并使用GROUP BY而不是DISTINCT :

SELECT field1, MAX(field2), COUNT(field3), SUM(field4), .... FROM table GROUP BY field1

如果我正確地理解了你的問(wèn)題,那就和我剛才的問(wèn)題類(lèi)似。 您希望能夠?qū)ISTINCT的可用性限制到指定的字段,而不是將其應(yīng)用于所有數(shù)據(jù)。

如果你使用GROUP BY而沒(méi)有聚合函數(shù),那么你的GROUP BY將會(huì)是你的DISTINCT文件。

如果你提出你的查詢(xún):

SELECT * from table GROUP BY field1;

它將根據(jù)field1的單個(gè)實(shí)例顯示所有結(jié)果。

例如,如果你有一個(gè)名字,地址和城市的表。 一個(gè)人有多個(gè)地址logging,但你只需要一個(gè)人的地址,你可以查詢(xún)?nèi)缦?#xff1a;

SELECT * FROM persons GROUP BY name;

結(jié)果將只有該名稱(chēng)的一個(gè)實(shí)例將顯示其地址,另一個(gè)將從結(jié)果表中省略。 警告:如果您的文件夾具有primefaces值(如firstName,lastName),您希望由兩者進(jìn)行分組。

SELECT * FROM persons GROUP BY lastName, firstName;

因?yàn)槿绻麅蓚€(gè)人擁有相同的姓氏,而您只按姓氏分組,則其中一個(gè)人將從結(jié)果中省略。 你需要考慮到這些事情。 希望這可以幫助。

SELECT c2.field1 , field2 FROM (SELECT DISTINCT field1 FROM dbo.TABLE AS C ) AS c1 JOIN dbo.TABLE AS c2 ON c1.field1 = c2.field1

很好的問(wèn)題@aryaxt – 你可以告訴這是一個(gè)很好的問(wèn)題,因?yàn)槟銌?wèn)了5年前,我今天偶然發(fā)現(xiàn)了這個(gè)問(wèn)題,試圖find答案!

我只是試圖編輯接受的答案,以包括這一點(diǎn),但萬(wàn)一我的編輯沒(méi)有進(jìn)入:

如果你的表不是那么大,并假設(shè)你的主鍵是一個(gè)自動(dòng)遞增的整數(shù),你可以做這樣的事情:

SELECT table.* FROM table --be able to take out dupes later LEFT JOIN ( SELECT field, MAX(id) as id FROM table GROUP BY field ) as noDupes on noDupes.id = table.id WHERE //this will result in only the last instance being seen noDupes.id is not NULL

你可以用WITH子句來(lái)做。

例如:

WITH c AS (SELECT DISTINCT a, b, c FROM tableName) SELECT * FROM tableName r, c WHERE c.rowid=r.rowid AND ca=ra AND cb=rb AND cc=rc

這也允許您僅select在WITH子句查詢(xún)中select的行。

對(duì)于SQL Server,您可以使用dense_rank和其他窗口函數(shù)來(lái)獲取指定列上具有重復(fù)值的所有行和列。 這是一個(gè)例子…

with t as ( select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r1' union all select col1 = 'c', col2 = 'b', col3 = 'a', other = 'r2' union all select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r3' union all select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r4' union all select col1 = 'c', col2 = 'b', col3 = 'a', other = 'r5' union all select col1 = 'a', col2 = 'a', col3 = 'a', other = 'r6' ), tdr as ( select *, total_dr_rows = count(*) over(partition by dr) from ( select *, dr = dense_rank() over(order by col1, col2, col3), dr_rn = row_number() over(partition by col1, col2, col3 order by other) from t ) x ) select * from tdr where total_dr_rows > 1

這是col1,col2和col3的每個(gè)不同組合的行數(shù)。

SELECT * FROM tblname GROUP BY duplicate_values ORDER BY ex.VISITED_ON DESC LIMIT 0 , 30

在ORDER BY我剛剛把例子放在這里,你也可以在這里添加ID字段

這是一個(gè)非常好的問(wèn)題。 我已經(jīng)閱讀了一些有用的答案,但可能我可以添加一個(gè)更精確的解釋。

只要不查詢(xún)其他信息,使用GROUP BY語(yǔ)句減less查詢(xún)結(jié)果的數(shù)量就很容易。 假設(shè)你有下面的表格“位置”。

--country-- --city-- France Lyon Poland Krakow France Paris France Marseille Italy Milano

現(xiàn)在查詢(xún)

SELECT country FROM locations GROUP BY country

將導(dǎo)致:

--country-- France Poland Italy

但是,下面的查詢(xún)

SELECT country, city FROM locations GROUP BY country

…在MS SQL中拋出一個(gè)錯(cuò)誤,因?yàn)槟愕挠?jì)算機(jī)如何知道法國(guó)“里昂”,“巴黎”或“馬賽”三個(gè)城市中的哪一個(gè)在“法國(guó)”右側(cè)的字段?

為了更正第二個(gè)查詢(xún),您必須添加此信息。 一種方法是使用函數(shù)MAX()或MIN(),在所有候選項(xiàng)中select最大值或最小值。 MAX()和MIN()不僅適用于數(shù)值,還可以比較string值的字母順序。

SELECT country, MAX(city) FROM locations GROUP BY country

將導(dǎo)致:

--country-- --city-- France Paris Poland Krakow Italy Milano

要么:

SELECT country, MIN(city) FROM locations GROUP BY country

將導(dǎo)致:

--country-- --city-- France Lyon Poland Krakow Italy Milano

只要您從字母(或數(shù)字)順序的兩端select您的值,這些function就是一個(gè)很好的解決scheme。 但是,如果情況并非如此呢? 讓我們假設(shè)你需要一個(gè)具有某種特征的值,例如以字母“M”開(kāi)始。 現(xiàn)在事情變得復(fù)雜了。

到目前為止,我唯一能find的解決scheme是將整個(gè)查詢(xún)放入子查詢(xún)中,然后用手來(lái)構(gòu)造額外的列:

SELECT countrylist.*, (SELECT TOP 1 city FROM locations WHERE country = countrylist.country AND city like 'M%' ) FROM (SELECT country FROM locations GROUP BY country) countrylist

將導(dǎo)致:

--country-- --city-- France Marseille Poland NULL Italy Milano

這可以通過(guò)內(nèi)部查詢(xún)來(lái)完成

$query = "SELECT * FROM (SELECT field FROM table ORDER BY id DESC) as rows GROUP BY field";

只需在GROUP BY子句中包含所有的字段。

SELECT DISTINCT如果所有三列的值在表中都是唯一的,則FIELD1,FIELD2,FIELD3 FROM TABLE1有效。

例如,如果您的名字有多個(gè)相同的值,但所選列中的姓氏和其他信息不同,則logging將包含在結(jié)果集中。

將GROUP BY添加到您要檢查重復(fù)您的查詢(xún)可能看起來(lái)像字段的字段

SELECT field1, field2, field3, ...... FROM table GROUP BY field1

field1將被檢查以排除重復(fù)的logging

或者你可能會(huì)像查詢(xún)

SELECT * FROM table GROUP BY field1

從SELECT中排除field1的重復(fù)logging

SELECT * from table where field in (SELECT distinct field from table)

總結(jié)

以上是生活随笔為你收集整理的mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。