Я хочу получить общее количество розничных продавцов из таблицы розничных продавцов и другие атрибуты из таблицы информации о посещениях. Этот запрос дает правильный результат для всех розничных продавцов и посещенных розничных продавцов, но дает неправильный результат для количества отзывов, количества заказов по обещаниям и т. Д. В двух столбцах.

select count(distinctrow tbl_retailer.retailer_id) as total_retailers,count(distinctrow tbl_visit_info.retailer_id) as visited_retailers,
SUM( IF( tbl_visit_info.activity_type = 1 ,1,0)) AS feedback,
SUM( IF( tbl_visit_info.activity_type = 2 ,1,0)) AS promise_order,
SUM( IF( tbl_visit_info.activity_type = 3 ,1,0)) AS stock,
SUM( IF( tbl_visit_info.activity_type = 6 ,1,0)) AS payment
from tbl_visit_info,tbl_retailer 
where visitor_id=175 and tbl_retailer.sr_id=175;

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

Это моя таблица visit_info, из которой я хочу подсчитать visit_retailers, количество отзывов, Promise_order_count_stock_count и количество платежей, которые определены как в столбце activity_type в таблице visit_info

0
Sahil Verma 11 Сен 2018 в 10:48

1 ответ

Лучший ответ

Имейте два подзапроса, по одному для каждой таблицы. JOIN результаты.

select * from

(select sr_id, count(distinctrow retailer_id) as total_retailers
 from tbl_retailer 
 group by sr_id) tr

join

(select visitor_id,
        count(distinctrow retailer_id) as visited_retailers,
        SUM( IF( tbl_visit_info.activity_type = 1 ,1,0)) AS feedback,
        SUM( IF( tbl_visit_info.activity_type = 2 ,1,0)) AS promise_order,
        SUM( IF( tbl_visit_info.activity_type = 3 ,1,0)) AS stock,
        SUM( IF( tbl_visit_info.activity_type = 6 ,1,0)) AS payment
 from tbl_visit_info
 group by visitor_id) tvi

on tvi.visitor_id = tr.sr_id
where tvi.visitor_id = 175

Просто удалите предложение WHERE, чтобы получить информацию обо всех посетителях!

Кстати, distinctrow здесь, вероятно, не нужен.

1
jarlh 11 Сен 2018 в 08:45