簡體   English   中英

SELECT DISTINCT name但返回所有數據

[英]SELECT DISTINCT name but return all data

所以我有一個裝滿汽車的桌子:

假設有4個閃避毒蛇,數據庫中會有4個條目,除了carID之外都是相同的。

   carID | carname | carmodel | colour   |  reg
--------------------------------------------------
    1    |  viper  |  dodge  |   red     |  123
    2    |  viper  |  dodge  |   red     |  124
    3    |  viper  |  dodge  |   red     |  125
    4    |  viper  |  dodge  |   red     |  126
    5    |   R8    |  audi   |   blue    |  127
    6    |   R8    |  audi   |   blue    |  128

當用戶搜索汽車時,我想只顯示一個閃避毒蛇。 但是,我想從該行和所有其他不同的汽車中提取所有信息。

所以我想要的輸出是:

   carID | carname | carmodel | colour  |  reg
--------------------------------------------------
     1   |  viper  |   dodge  |  red    |  123
     5   |   R8    |   audi   |  blue   |  127

如果我做:

SELECT DISTINCT * FROM cars

它會撤回所有條目。

SELECT DISTINCT carname FROM cars

只拉回其中一個,但我只有車名。

有沒有這樣的:

SELECT * FROM cars ORDER BY DISTINCT carname

或類似的東西?

我不明白,你的意思是分組嗎?

SELECT MAX(CarId) as carId, carname, carmodel, colour FROM cars GROUP BY carname, carmodel, colour;

如果你想要返回他的carId ,那么你可以使用以下將返回每個相同carname等的min(carid)

select min(carId) as carId, carname, carmodel, colour
from cars
group by carname, carmodel, colour

請參閱SQL Fiddle with Demo

您將看到我將carId置於聚合函數中,這是為了確保MySQL始終返回carId列的預期值。 如果您沒有GROUP BY或聚合SELECT列表中的項目,您可能會返回意外的結果。 (參見GROUP BY MySQL擴展

來自MySQL Docs:

MySQL擴展了GROUP BY的使用,因此選擇列表可以引用GROUP BY子句中未命名的非聚合列。 ...您可以通過避免不必要的列排序和分組來使用此功能來獲得更好的性能。 但是,當GROUP BY中未命名的每個非聚合列中的所有值對於每個組都相同時,這非常有用。 服務器可以自由選擇每個組中的任何值,因此除非它們相同,否則所選的值是不確定的。 此外,添加ORDER BY子句不會影響每個組中值的選擇。 選擇值后會對結果集進行排序,而ORDER BY不會影響服務器選擇的值。

試試這個:

SELECT DISTINCT carname, otherCol1, otherCol2... FROM cars

SQLFiddle在這里

當您編輯問題並希望顯示您的car_id時,上述解決方案並不好。 干得好:

SELECT MIN(carId) AS carId, carname, carmodel, colour
FROM cars
GROUP BY carname, carmodel, colour

MIN或MAX SUM無論你使用什么,只需一個投射...你可以說

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM