【问题标题】:select distinct values of a replaced selected result选择替换的选定结果的不同值
【发布时间】:2014-06-03 02:51:09
【问题描述】:

大家好。

我在使用 mySql 查询时遇到了一个小问题。假设我们有一个表,其中的值是成对的,但统一在同一个字段中,所以是这样的:

id  |  serviceName
----+-------------
1   |  foo - bar
2   |  foo - doo
3   |  foo - tep
4   |  bee - bar
5   |  bee - blo

我想选择不同的 serviceName 的第一部分,在本例中为 foo,bee。

所需的输出应该是:

foo
bee

在结果集中。

我现在的想法是制作SELECT DISTINCT a FROM REPLACE ( (SELECT serviceName as a FROM tableName), ' - ***', '')

但我不确定这是否可能,以及如何实现。我只想选择该字段的第一部分,并且我只想取其中不同的值......这可能吗?我需要一个正确的方向,我可以自己研究。

提前致谢。

【问题讨论】:

  • 显示你想要的输出

标签: mysql sql select replace distinct


【解决方案1】:

这是你在看的吗?

select substring_index(serviceName,'-',1) as `first_part` 
from test
group by `first_part`

DEMO

【讨论】:

  • 这真是太棒了,谢谢,我只考虑性能,这比独特的好吗?
  • 两者都有一些优点和缺点,您可以在此处查看,但对于小型数据集,这无关紧要stackoverflow.com/questions/7943957/…
  • 非常感谢,这是我正在寻找的东西,现在我很难将其提升为答案:/
  • 您必须宣传您选择的人以及第一个回答的人及其Patrick Q
【解决方案2】:

假设您总是想在破折号- 上拆分,这应该适合您。

SELECT DISTINCT LEFT(serviceName, LOCATE('-', serviceName) - 2) FROM tableName;

SQLFiddle

【讨论】:

  • 这也是一个非常好的方法,distinct是否比其他解决方案更好?
  • @MatteoBononi'peorthyr' 在性能方面,没有太多/任何明显的差异。尽管我相信如果您非常具体,DISTINCT 可能会稍微快一些。话虽如此,如果你想做一些事情,比如计算每个第一部分有多少条目匹配,那么你会想要使用GROUP BY
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 2018-12-10
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多