【发布时间】:2017-02-08 18:31:45
【问题描述】:
我想获取每个活动的每种付款方式售出的门票数量。我有以下查询:
SELECT count(distinct(a.performance_id)) as EventQuantity,
sum(a.admission_count) as TicketQuantity
FROM vw_PrecioTipoZona_Paid as a
WHERE 1 = 1
AND a.performance_id ='DED63133-A099-4949-AA57-13BBE9462BAF'
GROUP BY a.performance_id
我得到了这个结果,没关系:
EventQuantity TicketQuantity
1 203
但是当与其他表连接时,结果是总和,在这种情况下a.admission_count 乘以其他表中的记录数。
有问题的查询是这样的:
SELECT a.performance_id,
count(distinct(a.performance_id)) as EventQuantity,
sum(a.admission_count) as TicketQuantity,
b.payment_method as PaymentMethod
FROM vw_PrecioTipoZona_Paid as a inner join vw_Payment_UserByPerformance as b
on a.performance_id = b.performance_id
WHERE
1 = 1
and a.performance_id ='DED63133-A099-4949-AA57-13BBE9462BAF'
group by a.performance_id, b.payment_method
通过这个查询,我得到了这个结果:
EventQuantity TicketQuantity PaymentMethod
1 10353 Cash
1 5887 Card
1 1624 MasterCardECommerce
1 812 VisaEcommece
而这个结果是错误的,结果应该是:
EventQuantity TicketQuantity PaymentMethod
1 111 Cash
1 63 Card
1 17 MasterCardECommerce
1 8 VisaEcommece
vw_Payment_UserByPerformance 视图结构如下:
performance_id user_role_id userrole_name userrole_group date_transaction user_id user_name owner_user_id owner_user_name amount_adm_net amount_req_net amount_charge_charge amount_total amount_net chargeTransaction tax payment_method
vw_PrecioTipoZona_Paid 视图结构如下:
performance_id performance_name performance_start_date date_transaction user_role_id userrole_name userrole_group user_id user_name price_type price_zone price_zone_priority admission_count NET charge1 charge2 charge3 charge4 charge5 GROSS
我必须进行子查询吗?这里的问题在哪里?
【问题讨论】:
-
预期的结果集是什么?另外,
count(distinct(a.performance_id))有什么意义,因为您是按同一字段分组的? -
有助于将所有标识(在这种情况下为表名和列名)翻译成英文,以便我们更好地理解表的语义。
-
@GiorgosBetsos 我还想知道每种活动的每种付款方式售出的门票数量。
-
我猜你的
join条件是错误的,两个表之间必须有 1:1 的关系才能工作(如果你希望我们添加表描述,你可能需要添加帮助您识别潜在的关系,尽管您应该添加它们以使您的数据模型更清晰)。您还需要将PaymentMethod添加到您的group by,您可能已经这样做了,否则您的第二个查询将不会给出您显示的输出。 -
@Solarflare 我认为这个问题是因为有两个视图,而不是表。
标签: mysql sql sql-server join group-by