【问题标题】:How to join two count statements from two tables in SQLITE?如何在 SQLITE 中连接两个表中的两个计数语句?
【发布时间】:2021-02-14 05:26:42
【问题描述】:

我正在研究与类似于 Yelp 和 Tripadvisor 的应用程序相关的数据集。 我在 SQL 中运行查询。我需要从两个不同的表中检索数据。我需要每个企业的签到总数和上传的照片总数。一张表包含 photo_id、business_id、label 和 caption。另一个able 包含business_id 和日期。我已经编写了下面的查询,但它不会同时检索签到和照片的总数。任何一个结果都显示为 NONE。

    SELECT b.name, b.stars, b.review_count
   ,(SELECT COUNT (ch.business_id) AS total_checkin
    FROM checkin ch
    WHERE (ch.business_id = b.id) 
    GROUP BY ch.business_id) AS total_checkin

   ,(SELECT COUNT (photo.id) AS total_photos
    FROM photo
    WHERE (photo.business_id = b.id) AND (label = 'food')
    GROUP BY business_id) AS total_photos
    
    FROM business b

【问题讨论】:

  • NONE 不是 SQL 结果。我猜您正在通过 Python 应用程序执行此代码。所以发布 Python 代码,因为它是你的查询应该工作。

标签: sql sqlite count subquery where-clause


【解决方案1】:

如果数据结构是您描述的那些,您的代码应该可以工作。但是,我建议进行一些更改:

 SELECT b.name, b.stars, b.review_count,
    (
        SELECT COUNT(*)
        FROM checkin c
        WHERE c.business_id = b.id
    ) AS total_checkin,
    (
        SELECT COUNT(*)
        FROM photo p
        WHERE p.business_id = b.id AND p.label = 'food'
    ) AS total_photos
FROM business b

即:

  • 子查询中不需要GROUP BY 子句:这些是标量子查询,总是返回一行(如果照片上没有相应的签入,则计数为0

  • 不需要在子查询中对计数进行别名(仅在外部查询中需要别名)

  • 一致地使用表别名

  • WHERE 子句中的条件括号是多余的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2014-12-08
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多