我可以帮助我编写一个SQL查询来搜索表列中的多个单词

时间:2016-11-14 05:06:21

标签: sql

我正在尝试编写一个查询表的列的查询,并返回带有多个单词的别名的计数。

select 
    count(STREET_ADDRESS) AS MELBOURNE 
from 
    CUSTOMERS 
where 
    STREET_ADDRESS like '%MELBOURNE%'

我正尝试在一个查询中为多个城市执行此操作,例如Melbourne, Sydney, Auckland等。

3 个答案:

答案 0 :(得分:1)

试一试,SELECT COUNT(*) FROM CUSTOMERS WHERE STREET_ADDRESS IN ('MANGERE','AVONDALE')GROUP BY STREET_ADDRESS

答案 1 :(得分:0)

请记住,select中的列数是固定的。也许我很想念,但是你想要输入一个城市列表,并且输出包含的列数与你给出的输入一样多?

如果不是(固定的Nb城市): 建议:为查询添加条件(老实说,因为使用通配符没有真正的性能增强,你应该考虑添加一个“city”列,否则如果表太大,这个查询会变得很慢)

SELECT   
SUM(CASE WHEN STREET_ADDRESS LIKE '%MANGERE%' THEN 1 ELSE 0 END) AS    MANGERE_COUNT,   
SUM(CASE WHEN STREET_ADDRESS LIKE '%AVONDALE%' THEN 1 ELSE 0 END) AS AVONDALE_COUNT  
FROM CUSTOMERS  
WHERE   
STREET_ADDRESS like '%MANGERE%'  
OR  
STREET_ADDRESS like '%AVONDALE%'

如果是这种情况:
您需要创建动态SQL来转置输出。

希望它有所帮助 塞尔吉奥

答案 2 :(得分:0)

使用case表达式的派生表返回每个street_address的城市名称。然后对其结果进行GROUP BY计算:

select count(*), city
from
(
    select case when upper(STREET_ADDRESS) like '%MELBOURNE%' then 'Melbourne'
                when upper(STREET_ADDRESS) like '%SYDNEY%' then 'Sydney'
                when upper(STREET_ADDRESS) like '%AUCKLAND%' then 'Auckland'
           end as city
    from CUSTOMERS
) dt
group by city

注意:如果使用不区分大小写的排序规则,则不需要UPPER()个部分。