0
 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

別のテーブルからフィールドと関連するカウントを取得しようとしていますが、上記のクエリが機能していません。クエリには、2 つの異なるテーブル (apparea、applications) が含まれます。上記のクエリにはエラーがあり、これを実現する別の方法を探しています。

4

3 に答える 3

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
于 2013-03-06T10:39:20.627 に答える
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

差出人: http: //dev.mysql.com/doc/refman/5.0/en/select.html

于 2013-03-06T10:53:27.793 に答える
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 のカウントを取得し、テーブルを結合して各エリアのカウントを取得します

于 2013-03-06T10:40:12.030 に答える