mysql 选择不重复,SQL / mysql-选择不重复/唯一,但返回所有列?

这是一个非常好的问题。我已经在这里阅读了一些有用的答案,但是也许我可以添加更精确的解释。

只要不查询其他信息,使用GROUP BY语句减少查询结果的数量就很容易。假设您获得了下表“位置”。

--country-- --city--France Lyon

Poland Krakow

France Paris

France Marseille

Italy Milano

现在查询

SELECTcountryFROMlocationsGROUPBYcountry

将导致:

--country--France

Poland

Italy

但是,以下查询

SELECTcountry,cityFROMlocationsGROUPBYcountry

...在MS SQL中引发错误,因为您的计算机如何知道要在“法国”右侧的字段中读取的三个法国城市“里昂”,“巴黎”或“马赛”中的哪个?

为了更正第二个查询,您必须添加此信息。一种实现方法是使用函数MAX()或MIN(),在所有候选项中选择最大值或最小值。MAX()和MIN()不仅适用于数字值,而且还比较字符串值的字母顺序。

SELECTcountry,MAX(city)FROMlocationsGROUPBYcountry

将导致:

--country-- --city--France Paris

Poland Krakow

Italy Milano

要么:

SELECTcountry,MIN(city)FROMlocationsGROUPBYcountry

将导致:

--country-- --city--France Lyon

Poland Krakow

Italy Milano

只要您可以从字母(或数字)顺序的两端选择值,这些函数就是一个很好的解决方案。但是,如果不是这种情况怎么办?让我们假设您需要一个具有特定特征的值,例如以字母“ M”开头。现在事情变得复杂了。

到目前为止,我唯一能找到的解决方案是将整个查询放入一个子查询中,并手动构造它之外的其他列:

SELECTcountrylist.*,(SELECTTOP1cityFROMlocationsWHEREcountry=countrylist.countryANDcitylike'M%')FROM(SELECTcountryFROMlocationsGROUPBYcountry)countrylist

将导致:

--country-- --city--France Marseille

PolandNULLItaly Milano

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值