这是我的表
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的行只计算一次
例如,前两行具有相同的票证ID,实际上它们是一张票。我可以为总计数
这样做 SELECT COUNT(distinct(ticket_id)) as total ,
我不确定如何为SUM
执行此操作?
我知道这不起作用
SUM( DISTINCT ticket_id CASE WHEN `agancy` = '1' THEN 1 ELSE 0 END) as ag_1
答案 0 :(得分: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
请注意,这假设两个不同的代理商不会共享ticket_id。
编辑。好吧,我重读了你的帖子,我不确定你是否想要表中的TOTAL行数或者只是唯一的票证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;
答案 1 :(得分:0)
我会说使用分组
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