首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL - count inner join查询

MySQL - count inner join查询
EN

Stack Overflow用户
提问于 2012-07-20 02:15:08
回答 1查看 2.1K关注 0票数 0

我有以下查询,它的工作方式与我希望的一样,除了我想返回一个伪(?)每个属性所具有的从内部联接匹配的单元数计数的列。其中p.team = u.team和u.deleted = '0000-00-00 00:00:00‘和u.rates != '0’。我可以在同一个查询中这样做吗?

一个属性有几个单位。它们都连接到一个“团队”(比如用户名)。

代码语言:javascript
复制
SELECT DISTINCT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, p.url_title 
        FROM Properties AS p
        INNER JOIN Units AS u ON p.team = u.team
        INNER JOIN Rates AS r ON p.team = r.team
        INNER JOIN Photos AS ph ON p.team = ph.team
        AND p.public   = '1'
        AND u.rates   != '0'
        AND p.deleted  =  '0000-00-00 00:00:00'
        AND u.deleted  =  '000-00-00 00:00:00'
        AND r.deleted  =  '000-00-00 00:00:00'
        AND ph.deleted =  '000-00-00 00:00:00'
        GROUP BY p.id
        ORDER BY p.created ASC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-20 02:18:34

由于您只有一个聚合,并且似乎是按Properties行进行分组,因此这应该是相对简单的。你的意思是像这样的东西(未经测试)?

代码语言:javascript
复制
SELECT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, 
       p.url_title , COUNT(u.*) AS number_of_units
FROM Properties AS p
INNER JOIN Units AS u ON p.team = u.team
INNER JOIN Rates AS r ON p.team = r.team
INNER JOIN Photos AS ph ON p.team = ph.team
AND p.public   = '1'
AND u.rates   != '0'
AND p.deleted  =  '0000-00-00 00:00:00'
AND u.deleted  =  '000-00-00 00:00:00'
AND r.deleted  =  '000-00-00 00:00:00'
AND ph.deleted =  '000-00-00 00:00:00'
GROUP BY p.id, p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, p.url_title
ORDER BY p.created ASC

根据您的意思,您可能不得不改为使用COUNT(DISTINCT(u.id))。很难从你的问题中分辨出来。

作为参考,“硬方法”是创建一个子查询,以连接到该查询来进行计数。您可能需要执行此操作来计算多个不相关的项目,或者按一个项目分组并按另一个项目计数:

代码语言:javascript
复制
SELECT DISTINCT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng,
                p.url_title, uuCount.number_of_units
FROM Properties AS p
INNER JOIN Units AS u ON p.team = u.team
INNER JOIN Rates AS r ON p.team = r.team
INNER JOIN Photos AS ph ON p.team = ph.team
AND p.public   = '1'
AND u.rates   != '0'
AND p.deleted  =  '0000-00-00 00:00:00'
AND u.deleted  =  '000-00-00 00:00:00'
AND r.deleted  =  '000-00-00 00:00:00'
AND ph.deleted =  '000-00-00 00:00:00'
INNER JOIN 
(
    SELECT uu.team, COUNT(*) AS number_of_units
    FROM Units uu
    WHERE uu.deleted = '0000-00-00 00:00:00'
    AND u.rates != '0'
    GROUP BY uu.team
) AS uuCount ON p.team = uuCount.team
GROUP BY p.id
ORDER BY p.created ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11566893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档