У меня есть запрос, который работает, но кажется, что он может/должен быть переписан более элегантным способом. Проблема в том, что я не нашел способ сделать это из-за инструкции HAVING
.Несколько условий для HAVING в запросе MySQL
Я просто хочу посмотреть, в каком из 3 магазинов был куплен клиент, и назначить им «главный магазин».
Я закончил с UNION
В 7 разных случаях ... это становится немного смешно.
В моем прекрасном мире я мог бы как-то использовать HAVING . . OR HAVING . .
, но это, похоже, не соответствует философии MySQL.
SELECT Cust_ID, 'Main_store_1' AS Main_Store, sum(StoreName = 'Store_1') as num_Store_1, sum(StoreName = 'Store_2') as num_Store_2, sum(StoreName = 'Store_3') as num_Store_3
FROM shopping_table
WHERE Cust_ID in (<some list of Cust_IDs>)
AND StoreName in ('Store_1', 'Store_2', 'Store_3')
GROUP BY Cust_ID
HAVING num_Store_1 > 1 and num_Store_2 = 0 and Store_3 = 0
UNION
SELECT Cust_ID, 'Main_store_2' AS Main_Store, sum(StoreName = 'Store_1') as num_Store_1, sum(StoreName = 'Store_2') as num_Store_2, sum(StoreName = 'Store_3') as num_Store_3
FROM shopping_table
WHERE Cust_ID in (<some list of Cust_IDs>)
AND StoreName in ('Store_1', 'Store_2', 'Store_3')
GROUP BY Cust_ID
HAVING num_Store_1 = 0 and num_Store_2 > 0 and Store_3 = 0
и советы/философские выводы были бы весьма признательны. Благодарю.
Можете ли вы включить образец данных и ожидаемые результаты? Является ли главный магазин магазином, где клиент покупает исключительно? – JRD
Да, главный магазин - это магазин, в котором покупатель совершает покупки исключительно (хотя в реальной жизни есть случай для любой комбинации посещенных магазинов, но назначение передает их в один «главный магазин» ... следовательно, 7 UNION заявлений и слишком длинный кусок кода MySQL) –
Да, как вы собираетесь предоставить схему и образцы данных, чтобы мы могли * придумать *, как вы говорите об эффективности сравнения? – Drew