我正在尝试编写一个查询表的列的查询,并返回带有多个单词的别名的计数。
select
count(STREET_ADDRESS) AS MELBOURNE
from
CUSTOMERS
where
STREET_ADDRESS like '%MELBOURNE%'
我正尝试在一个查询中为多个城市执行此操作,例如Melbourne, Sydney, Auckland
等。
答案 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()
个部分。