我不知道如何解释我想要什么,然后给出一个例子
country prefix
Argentina-Mobile 549
Argentina-Neuquen 54299
Argentina-Rosario 54341
Argentina-Salta 54387
Argentina-Santa Fe 54342
Argentina-Tucuman 54381
Armenia 374
Armenia Mobile-K-Telecom 37477
Armenia Mobile-K-Telecom 37493
Armenia Mobile-K-Telecom 37494
Armenia Mobile-K-Telecom 37498
Armenia-Karabakh 37447
Armenia-Mobile 37455
Armenia-Mobile 3749
Armenia-Yerevan 37410
Aruba 297
Aruba-Mobile 29756
Aruba-Mobile 29759
Aruba-Mobile 29766
Aruba-Mobile 29769
Aruba-Mobile 29796
Aruba-Mobile 29799
Aruba-Mobile-Digicell 29773
Aruba-Mobile-Digicell 29774
Aruba-Mobile-MIO 297600
Aruba-Mobile-MIO 297622
Ascension Island 247
Australia 61
Australia-Adelaide/Perth 61861
Australia-Adelaide/Perth 61862
Australia-Adelaide/Perth 61863我想对前缀运行一个查询,以获得最短父前缀的列表
country prefix
Argentina -Mobile 549
Armenia 374
Aruba 297
Australia 61发布于 2010-06-22 08:14:39
这比我想象的要简单。您只需按国家/地区分组,然后使用MIN()。
但是,如果每个字段都有一个国家代码列,这会容易得多,而且不容易出错,而不是必须解析国家文本,这可能会导致错误。
SELECT t2.country, MIN(CAST(t1.prefix AS SIGNED)) AS prefix FROM MyTable t1
LEFT JOIN MyTable t2
ON t2.prefix = t1.prefix
GROUP BY
IF(
INSTR(t1.country, ' mobile') = 0 AND INSTR(t1.country, '-') = 0,
t1.country,
IF(
INSTR(t1.country, ' mobile') > 0 AND INSTR(t1.country, '-') > 0,
IF(
INSTR(t1.country, ' mobile') > INSTR(t1.country, '-'),
LEFT(t1.country, INSTR(t1.country, '-') - 1),
LEFT(t1.country, INSTR(t1.country, ' mobile') - 1)
),
IF(
INSTR(t1.country, ' mobile') > INSTR(t1.country, '-'),
LEFT(t1.country, INSTR(t1.country, ' mobile') - 1),
LEFT(t1.country, INSTR(t1.country, '-') - 1)
)
)
)
ORDER BY t2.country收益率:
country prefix
Argentina-Mobile 549
Armenia 374
Aruba 297
Ascension Island 247
Australia 61发布于 2010-06-22 06:51:16
我发布了一个实时运行示例(使用SQL Azure方言):
https://data.stackexchange.com/stackoverflow/query/4822
请注意,它使用PATINDEX (这不能移植到MySQL)来查找第一个出现的空格,或者使用'-‘来首先对国家进行分类。然后,它会在类中找到最短的一个--然后再加入进来,得到结果。
发布于 2010-10-13 15:42:09
我认为您可以通过将国家规范化到它自己的字段(和/或带有国家id的表)中来取得长足的进步。从长远来看,这可能会有所帮助。
然后你只需要做一个简单的
select distinct country_name, min(prefix)https://stackoverflow.com/questions/3088885
复制相似问题