1

これは私のテーブルです

id , tiket_id , agency , problem
 1  , 123     , 1      ,  x
 2  , 123     , 1      ,  y
 3  , 124     , 2      ,  z

代理店に基づいてテーブルの統計情報を提供するクエリがあります。基本的には、カウントと合計のカップルです

 SELECT  COUNT(*) as total , 
 SUM(CASE WHEN `agancy` = '1' THEN 1 ELSE 0 END) as ag_1
 SUM(CASE WHEN `agancy` = '2' THEN 1 ELSE 0 END) as ag_2

しかし、同じ ticket_id を持つ行を 1 回だけカウントしたい

たとえば、最初の 2 行は同じチケット ID を持ち、実際には 1 つのチケットです。

私は合計数のためにこれを行うことができます

 SELECT  COUNT(distinct(ticket_id)) as total , 

のためにこれを行う方法がわかりませんかSUM?私はこれがうまくいかないことを知っています

 SUM(  DISTINCT ticket_id CASE WHEN `agancy` = '1' THEN 1 ELSE 0 END) as ag_1
4

2 に答える 2

1

結果行が 1 つだけ必要な場合は、次のようにします。

select sum(cnt) as total, SUM(case when agency = 1 then 1 else 0 end) as ag1, SUM(case when agency = 2 then 1 else 0 end) as ag2 from (     
    SELECT COUNT(*) as cnt, agency
    from foo
    group by tiket_id,agency
) b

http://www.sqlfiddle.com/#!2/cde84/1

これは、2 つの異なる代理店が ticket_id を共有しないことを前提としていることに注意してください。

編集。さて、あなたの投稿を読み直しましたが、テーブル内の行の合計数が必要なのか、それとも一意のチケット ID だけが必要なのかわかりません。一意のチケット ID だけが必要な場合は、次のようにします。

select COUNT(*) as total , SUM(case when agency = 1 then 1 else 0 end) as ag1, SUM(case when agency = 2 then 1 else 0 end) as ag2 from (        
    SELECT COUNT(*) as cnt, agency
    from foo
    group by tiket_id,agency
) b;

参照: http://www.sqlfiddle.com/#!2/cde84/5

于 2012-11-17T20:38:14.803 に答える
0

group by を使用すると思います

SELECT  COUNT(*) as total , 
SUM(CASE WHEN `agancy` = '1' THEN 1 ELSE 0 END) as ag_1
SUM(CASE WHEN `agancy` = '2' THEN 1 ELSE 0 END) as ag_2
from mytable
group by tiket_id
于 2012-11-17T20:25:36.833 に答える