我出售在线课程以及零售课程的订阅。 我会带出最畅销计划/课程的“前5名”。为此,我有一个名为“ subscriptionPlan”的表,该表存储所购买的计划ID,或者在课程的情况下,存储课程ID和在此事务上花费的金额。示例:
表格订阅计划
sbpId | subId | plaId | couId | sbpAmount
1 | 1 | 1 | 1 | 499.99
2 | 2 | 1 | 2 | 499.99
3 | 3 | 2 | 0 | 899.99
4 | 4 | 1 | 1 | 499.99
仅出于教育目的,plaId = 1是我创建的用于维护数据库完整性的计划,称为“单次销售”。当couId不为空时,您还购买了单独的课程,而不是可以参加任何课程的计划。
我的需求是:列出前5名的销售额。如果是计划,则显示计划名称(计划表,列标题)。如果是课程,则显示其名称(表格课程,colna couTitle)。我无法编码的逻辑。我能够将PLANS排在前5名,但是由于GROUP BY是按计划ID进行的,因此可以将课程分组。我相信恶作剧就在这里,也许在此GROUPBY中创建了IF / ELSE,但我不知道该怎么做。
我为排名前5位的计划编写的查询是:
SELECT sp.plaId, sp.couId, p.plaTitle, p.plaPermanent, c.couTitle, SUM(sbpAmount) AS sbpTotalAmount
FROM subscriptionPlan sp
LEFT JOIN plan p ON sp.plaId = p.plaId
LEFT JOIN course c ON sp.couId = c.couId
GROUP BY sp.plaId
ORDER BY sbpTotalAmount DESC
LIMIT 5
我期望的结果是:
plaId | couId | plaTitle | couTitle | plaPermanent | sbpTotalAmount
1 | 1 | Venda avulsa | Curso 01 | true | 999.98
2 | 0 | Acesso total | null | false | 899.99
3 | 2 | Venda avulsa | Curso 02 | true | 499.99
如何进入该查询公式?
答案 0 :(得分:0)
分组时,您可以使用:
在您的情况下,您似乎需要按表达式分组,例如:
def make_pdf_from_url(url, options=None):
"""Produces a pdf from a website's url.
Args:
url (str): A valid url
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the website
"""
return pdfkit.from_url(url, False, configuration=_get_pdfkit_config(), options=options)
def make_pdf_from_raw_html(html, options=None):
"""Produces a pdf from raw html.
Args:
html (str): Valid html
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the supplied html
"""
return pdfkit.from_string(html, False, configuration=_get_pdfkit_config(), options=options)
在这种情况下,我选择GROUP BY CASE WHEN sp.plaId = 1 THEN -1 ELSE sp.couId END
作为“单一计划”的分组。您可以将值替换为与任何-1
不匹配的其他值。