2017-02-08 4 views
1

Я хочу получить количество билетов, проданных за каждый способ оплаты за каждое событие. и я последующие запросы:группа не работает правильно соединяет две таблицы

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 

И этот результат wron, результат должен быть:

EventQuantity TicketQuantity PaymentMethod 
     1    111    Cash 
     1    63    Card 
     1    17  MasterCardECommerce 
     1    8    VisaEcommece 

vw_Payment_UserByPerformance вид структуры i S последующие:

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 

Должен ли я сделать подзапрос? Где проблема здесь?

+0

Каков ожидаемый результат? Кроме того, какой смысл в 'count (distinct (a.performance_id))', поскольку вы группируете одно поле? –

+0

Было бы полезно перевести все идентификаторы (имена таблиц и столбцов в этом случае) на английский, поэтому мы лучше понимаем семантику вашей таблицы. – pintxo

+0

@GiorgosBetsos Я также хочу узнать количество билетов, проданных за каждый тип оплаты за каждое событие. –

ответ

0

Вы его в Вашем вопросе уже:

Я хочу, чтобы получить количество проданных билетов за способ оплаты и я последующей деятельности Query

Так вы в основном ищете в запросе, как это:

SELECT payment_method, COUNT(*) FROM x GROUP BY payment_method; 

Вы, кажется, что-то делать по-другому, то результаты могут нравится, как так, если ваша группа на payment_method колонка, а также:

SELECT  
    a.performance_id AS performanceId, 
    b.payment_method AS paymentMethod, 
    COUNT(*) numPayments 
FROM 
    vw_PrecioTipoZona_Paid as a 
INNER JOIN 
    vw_Payment_UserByPerformance AS b ON (a.performance_id = b.performance_id) 
WHERE 
    a.performance_id ='DED63133-A099-4949-AA57-13BBE9462BAF' 
GROUP BY 
    a.performance_id, 
    b.payment_method 
+0

Не совсем @pintxo, я не работаю для меня. Я хочу количество продаж билетов за один способ оплаты, это должно быть примерно так: Mastercard 3, Visa 1 –

0

Во-первых, это не имеет смысла вместе:

SELECT a.performance_id, 
     count(distinct(a.performance_id)) as EventQuantity, 
... 
GROUP BY a.performance_id 

Вы группируя материал, имеющий те же performance_id, а затем вы просите, чтобы показать вы сколько DISTINCT performance_ids находятся в группе.

Угадайте, каков всегда ответ?

Во-вторых, SQL является декларативным языком, поэтому сначала объявляйте, что хотите.

Если вы не можете выразить это в SQL адекватно (это нормально), то сделайте это в словах и, пожалуйста, обновите свой вопрос. Угадывание недостатка ресурсов редко бывает продуктивным.

0

MySQl позволяет вам неправильно использовать группу. Вы никогда не должны использовать технику, использованную в этом запросе.

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 
    a.performance_id ='DED63133-A099-4949-AA57-13BBE9462BAF' 
    group by a.performance_id, b.payment_method 

При использовании группы по единственному способу гарантировать правильный результат состоит в группу всех необобщенных полей. Все остальные базы данных составляют эту часть синтаксиса и, следовательно, не имеют этой проблемы.

Если это все еще не дает правильных результатов, возникает проблема со спецификой того, что вы намеревались сделать тем, что вы написали. Нам нужно будет увидеть бизнес-требование, структуру таблицы, образцы данных в таблицах и примеры результатов, чтобы помочь вам найти правильный запрос.

Глядя на ваши дополнительные данные, добавленные во время написания этого письма, я думаю, вам нужно использовать производную таблицу.

SELECT  a.performance_id, 
      count(a.performance_id) as EventQuantity, 
      a.admission_count as TicketQuantity, 
      b.payment_method as PaymentMethod 
FROM (select performance_id, sum(admission_count) as Admissioncount vw_PrecioTipoZona_Paid 
WHERE a.performance_id ='DED63133-A099-4949-AA57-13BBE9462BAF' 
group by performance_id)as a 
inner join vw_Payment_UserByPerformance as b 
     on a.performance_id = b.performance_id 
    group by a.performance_id, b.payment_method 
+0

Этот запрос возвращает тот же результат, что и у меня. –

Смежные вопросы