【问题标题】:Why are my SQL subqueries getting syntax errors? Using COUNT()为什么我的 SQL 子查询会出现语法错误?使用计数()
【发布时间】:2021-08-18 19:13:58
【问题描述】:

问题是:有更多的评论中有“爱”这个词还是“恨”这个词?

这是我尝试使用的代码:

SELECT 
    (COUNT(SELECT id FROM review WHERE text LIKE '%love%') FROM review) AS NumLove,
    (COUNT(SELECT id FROM review WHERE text LIKE '%hate%') FROM review) AS NumHate
FROM 
    review

另一种变化:

SELECT 
    COUNT(SELECT id FROM review WHERE text LIKE '%love%') AS NumLove,
    COUNT(SELECT id FROM review WHERE text LIKE '%hate%') AS NumHate
FROM 
    review

我收到一个错误:

“SELECT”附近的语法错误

我曾多次尝试调整代码,但不断出现语法错误。我可以自己运行任何一个 select 语句,它们都会执行。我只是无法让它们在单个查询中运行。

【问题讨论】:

  • 不计算子查询。相反,select count(*).
  • 但是我如何包含 2 个子查询?
  • 写两个不同的查询。一口气完成并没有更快和更难阅读。 (如果你必须在一个你必须做子查询)
  • 好的,谢谢你们!

标签: sql subquery


【解决方案1】:

你需要条件聚合:

SELECT COUNT(CASE WHEN text LIKE '%love%' THEN 1 END) AS NumLove,
       COUNT(CASE WHEN text LIKE '%hate%' THEN 1 END) AS NumHate
FROM review

【讨论】:

    【解决方案2】:

    要记住的重要一点是函数用于列而不是结果集。到达那里的多种方式。除了 CASE 示例。

    SELECT COUNT(Pro.Love) AS NumLov
    FROM 
    (SELECT id Love FROM review WHERE text LIKE '%love%') as Pro
    

    要在一个查询中编写此内容,您可以使用 case 表达式将您的爱与恨 eval 转换为 1 和 0,并使用 Sum 而不是 count。

    SELECT SUM(results.love) AS NumLov
    FROM 
    (
      SELECT CASE WHEN text like '%love%' THEN 1 ELSE 0 END AS love
      FROM review
    ) as results
    

    【讨论】:

      【解决方案3】:

      在使用条件case expression 时,我更喜欢在此处使用sum 而不是count - 因为您实际上是在将每个case expression 中的1 的数量相加(求和)

      select 
          Sum(case when text like '%love%' then 1 else 0 end) as NumLove,
          Sum(case when text like '%hate%' then 1 else 0 end) as NumHate
      from review
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        • 2016-03-22
        • 1970-01-01
        相关资源
        最近更新 更多