Прежде чем приступить к написанию скрипта Python, я хочу посмотреть, может ли только MySQL дать результат.
У меня есть список продуктов:
PID Product
-----------
1 AAA
2 ABC
3 BAC
4 CAB
5 CBA
У меня есть список компаний, заказывающих эти продукты несколько раз:
CID PID
-------
1 1
2 3
1 5
3 2
1 1
2 3
Желаемый результат:
CID AAA ABC BAC CAB CAB CBA
---------------------------
1 Y Y
2 Y
3 Y
Как бы я это сделал в Python?
- Создание временной таблицы со столбцами (CID AAA ABC BAC CAB CAB CBA)
- Запустите 2 цикла и обновите нужную таблицу, когда нужный столбец совпадет.
Просто любопытно посмотреть, существует ли решение только для MySQL.
p.s: Это всего лишь пример, и в действительности проблема состоит из нескольких сотен продуктов и нескольких тысяч компаний. Я создал временную таблицу для 100 продуктов, выполнив транспонирование в Excel, и преобразовал ее в таблицу MySQL.
Ниже приводится подход, к которому я наконец прибегнул. Спасибо за отзыв ребята.
########### Python script to generate the MySQL query ##############
#MySQL Connection String Goes here#
#Generate MySQL 'CASE' logic
cursor = db.cursor()
if __name__ == '__main__':
cursor.execute("select PID, Product from products")
productlist = cursor.fetchall()
for product in productlist:
print ("max(case when PID = %s then 'Y' else '' end) as `%s`,") % (product[0], product[1])
db.close()
Используйте сгенерированный запрос в формате, предложенном ник.
select cid,
max(case when pid = 1 then 'Y' else '' end) as AAA,
max(case when pid = 2 then 'Y' else '' end) as ABC,
max(case when pid = 3 then 'Y' else '' end) as BAC,
max(case when pid = 4 then 'Y' else '' end) as CAB,
max(case when pid = 5 then 'Y' else '' end) as CBA
from companies
group by cid