我有一个表,看起来像:
PERSON | STATUS | ICE CREAM FLAVOR TYPE | FAVORITE ICE CREAM FLAVOR
Alice | ALIVE | CHOCOLATE | Dark chocolate
Bobby | ALIVE | CHOCOLATE | Mint chocolate
Olive | DEAD | BAD TASTE | Vanilla
Hilbertonious | ALIVE | BAD TASTE | Mango strawberry
我想从中得到一个按冰淇淋口味、按冰淇淋口味类型的活人数量。例如,对于上述数据,它将是:
{ CHOCOLATE: { "Dark chocolate": 1, "Mint chocolate": 1 } }, BAD TASTE: { "Mango strawberry": 1 }}
(Olive被排除在外是因为它们已经死了,可能是因为吃香草冰淇淋的无聊(
无论如何,按状态过滤并按最喜欢的冰淇淋口味细分计数是很简单的(这就是我目前所掌握的(:
from collections import Counter
from a_sql_alchemy_wrapper.models import Person, Session
session = Session()
ice_cream_flavors_with_counts = Counter(
person.favorite_ice_cream_flavor for patient in
session.query(Person)
.filter(
Person.status == Person.PersonStatus.alive
)
.all()
)
这给我带来了一个冰淇淋口味的计数词典:
{ "Mint chocolate": 1, "Dark chocolate": 1, "Mango strawberry": 1}
下一步,按冰淇淋口味类型分解冰淇淋口味,我是否可以用Python或SQLAlchemy编写一些流媒体代码,将最喜欢的冰淇淋口味分组为它们的类型?
如果可以避免的话,我实际上不想使用冰淇淋口味类型枚举列(它还不存在,可能不应该添加,因为只将冰淇淋口味映射到自己表中的类型更明智(。理想情况下,我只需要检查最喜欢的冰淇淋口味字符串的后缀,并根据字符串中的最后一个单词将其分解。
有没有办法以流媒体的方式很好地进行分组?
您可以使用这样的case语句:
whens={
'Dark chocolate': 'CHOCOLATE',
'Mint chocolate': 'CHOCOLATE',
'Mango strawberry': 'BAD_TASTE'
}
from sqlalchemy import case
session.query(Person, case(whens=whens, value=Person.favorite_ice_cream_flavor).label('flavor_type')).all()
https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.case