SELECT area_id,
area_name,
(select count(*) from applications
where claims_status=1 and
center_name=c.area_id) as cont
FROM apparea c where cont<>0
我正在尝试从其他表中获取字段和相关计数,但上述查询无法正常工作。该查询涉及两个不同的表(服装,应用程序)。上面的查询有错误,我正在寻找实现这一目标的替代方法。
答案 0 :(得分:1)
cont
子句中没有列WHERE
的别名。你会想要使用类似的东西:
SELECT area_id,
area_name,
cont
FROM
(
SELECT area_id,
area_name,
(select count(*)
from applications
where claims_status=1
and center_name=c.area_id) as cont
FROM apparea c
) c
where cont<>0
这也可以使用LEFT JOIN
:
select c.area_id,
c.area_name,
a.cont
from apparea c
left join
(
select count(*) cont,
center_name
from applications
where claims_status=1
group by center_name
) a
on c.area_id = a.center_name
答案 1 :(得分:0)
尝试此查询
SELECT
c.area_id,
c.area_name,
cnt
FROM
apparea c,
(select
center_name,
count(*) AS cnt
from
applications
where
claims_status=1
GROUP BY
center_name
HAVING
count(*) > 0) cont
where
c.area_id = cont.center_name;
获得每个center_name的计数,然后连接表以获取每个区域的计数
答案 2 :(得分:0)
使用HAVING
而不是where
。
因为aliases
存在问题。
It is not permissible to refer to a column alias in a WHERE clause, because the column
value might not yet be determined when the WHERE clause is executed.
See Section C.5.5.4, “Problems with Column Aliases”.
http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html