SQL查询加入不同的表和计数

Posted

技术标签:

【中文标题】SQL查询加入不同的表和计数【英文标题】:SQL query joining different tables and count 【发布时间】:2016-02-14 14:13:29 【问题描述】:

我的 SQL 查询语法很弱,我需要使用 php symfony2 进行一次查询。 我有表公司。它有“城市”列。 我有表 CompanyCategory。它有“company_id”和“category_id”列。 我有表类别。它有“名称”列。

我需要获取所有可用城市的类别总数。

例子:

["Riga" => 156,
"Berlin" => 225]

我已经环顾了几个小时,但其他示例对我的帮助不够,因为我还无法理解如此复杂的查询。

我之前和现在都尝试过很多案例,每次都遇到不同的异常。

public function getCategoriesInCities() 
    return $this->getEntityManager()
        ->createQuery('SELECT c.city, count(*) as categorycount FROM AdminBundle:Company c INNER JOIN AdminBundle:CompanyCategory s')
        ->getArrayResult();



[Syntax Error] line 0, col -1: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got end of string.

其他情况:

public function getCategoriesInCities() 
    return $asData = $this->getEntityManager()
        ->createQuery('SELECT c.city, count(*) as categorycount FROM AdminBundle:Company c INNER JOIN AdminBundle:CompanyCategory s ON(c.id = s.company_id) GROUP BY c.city')
        ->getArrayResult();



[Syntax Error] line 0, col 123: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'

其他情况:

public function getCategoriesInCities() 
    return $this->createQueryBuilder('c')
        ->select('c.city, COUNT(*) as categorycount')
        ->innerJoin('AdminBundle:CompanyCategory ON(c.id = cc.company_id)', 'cc')
        ->groupBy('c.city')
        ->getQuery()
        ->getArrayResult();


[Syntax Error] line 0, col 138: Error: Expected Literal, got 'BY'

等等..找不到解决办法。

【问题讨论】:

【参考方案1】:

这是一个简单的 JOIN 查询..

SELECT t.city,count(*) as categoryCount
FROM Company t
INNER JOIN CompanyCategory s ON(t.id = s.company_ID)
GROUP BY t.city

您对这个网站并不陌生,所以在未来,至少尝试展示您自己所做的一些尝试和努力。

【讨论】:

以上是关于SQL查询加入不同的表和计数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的表和不同的列名连接多个查询

3 个表和一个子查询的 SQL 连接问题

sql语句:一个表和另外两个表的关联语句

使用动态加载的表和数据库名称在查询中避免 SQL 注入

sql sever 查询用户所有的表和各个表数据量

使用 SQL 和 Sqlalchemy 查询的表具有相同的列名