【问题标题】:Select Value Match - SQL选择值匹配 - SQL
【发布时间】:2016-10-23 01:51:38
【问题描述】:

您能否建议是否可以为查询中的多个子字符串选择计数

所以如果我有一个包含例如文本消息的消息字段,我可以这样做

SELECT COUNT(1) 
FROM MESSAGES 
WHERE MESSAGE_BODY LIKE '%hello%'

但我想做的更多:

SELECT STRING, COUNT(1) 
FROM MESSAGES 
WHERE MESSAGE_BODY IN (list of strings with wild card)

这可能吗?

分解示例:

ID | Message_Body
1 |你好,你好吗?
2 |嗨,非常感谢
3 |你好,最近怎么样?
4 |咻

想要的输出:

你好,2
巧,1

SELECT(输入字符串),COUNT(1) 从表 WHERE (输入字符串) IN ('%hello%','%ciao%')

【问题讨论】:

    标签: sql oracle substring


    【解决方案1】:

    如果我理解正确,你可以试试这样:

    SELECT t.string,
           CASE WHEN t.MESSAGE_BODY LIKE '%laptop%' then 1 else 0 END +
           CASE WHEN t.MESSAGE_BODY LIKE '%one%' then 1 else 0 END +
           CASE WHEN t.MESSAGE_BODY LIKE '%two%' then 1 else 0 END as count_col
    FROM YourTable t
    

    如果您只想要多个 LIKE 比较,请使用 REGEXP_LIKE()

    SELECT STRING, COUNT(1) 
    FROM MESSAGES
    where regexp_like(MESSAGE_BODY, 'one|two|laptop')
    

    编辑:您可以使用包含您感兴趣的所有字符串的派生表,并左连接到原始表以进行计数:

    SELECT t.wrd,COUNT(s.id) as cnt
    FROM (
        SELECT 'hello' as wrd FROM DUAL
        UNION ALL
        SELECT 'ciao' as wrd FROM DUAL) t
    LEFT OUTER JOIN messages s
     ON(s.message_body LIKE '%' || t.wrd || '%')
    GROUP BY t.wrd
    

    【讨论】:

    • STRING 来自哪里?
    • 我不知道,假设他知道自己在做什么(他在选择中使用了它)
    • 嗨,谢谢你的信息 - 有没有办法让“选择”中的字符串值是我在 where 子句中输入的字符串,并且计算每次出现的次数?
    • 首先你必须帮助我更好地理解你。发布数据样本和预期输出,因为我真的不明白你在做什么。
    • 嗨,我刚刚更新了帖子以尝试更清楚一点:)
    【解决方案2】:

    这里是寻找整个单词:

      SELECT a.word, COUNT (message.message_body)
        FROM (    SELECT REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) word
                    FROM DUAL
              CONNECT BY REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) IS NOT NULL) a
             LEFT OUTER JOIN MESSAGES ON REGEXP_INSTR (MESSAGE_BODY, '(^|\s)' || a.word || '(\s|$)', 1, 1, 0, 'i') > 0
    GROUP BY a.word
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2013-07-17
      • 2016-11-22
      • 2022-01-15
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多