gpt4 book ai didi

sql - 根据最常见的订单计算付款类型并为客户分配标签

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:42 24 4
gpt4 key购买 nike

我有一个包含 20 多列的大型订单表。其中有 ACCOUNT_ID 和 PAYMENT_TYPE。

我想根据首选(最常见)的付款类型创建三个单独的表格。

我可以很容易地计算每个客户的付款类型,但不知道实现我需要的背后的逻辑。

希望有人能为我指明正确的方向?

如果不清楚或需要示例,请告诉我

最佳答案

假设您希望将表拆分为不同的支付类型,使用 View 而不是单独的表,或者每次将行插入订单时,您还需要通过某种机制(手动、触发)插入相关的订单[PaymentType]表等)。

正如 W3schools 所说:

In SQL, a view is a virtual table based on the result-set of an SQL statement.

您定义一个返回结果集的查询,然后您可以像对待表一样对待它。这意味着当您将行插入到订单中时,如果它们符合条件,您可以在您的 View 中查看它们,您无需担心更新另一个表。

假设您希望根据付款类型拆分它们,并且您有一个类似如下的付款类型表:

PaymentTypeId      PaymentTypeDesc
----------------------------------
1 Cash
2 Cheque
3 Credit Card

那么以下内容可能就是您要查找的内容。

CREATE VIEW vw_OrdersCash AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE = 1

CREATE VIEW vw_OrdersCheque AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE = 2

CREATE VIEW vw_OrdersCreditCard AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE = 3

只要把它们当成表格,你想做什么就做什么。

SELECT * FROM vw_OrdersCash

编辑:

阅读您对问题的评论之一,听起来您希望它比上面的建议更有活力。如果没有示例输出,很难说出您要实现的目标,但是如果您想要 3 个动态表,您可以扩展上面的内容,而不是将 View 过滤到特定的支付类型,它们将过滤到第一个、第二个执行时第三常见。

关于如何做到这一点的想法如下。查找 View vw_OrdersTopThreePaymentMethods 查看订单表并按订单数量降序返回前三种支付类型(即第 1、第 2、第 3)。然后会有 View 获取该特定类型的所有订单,所有订单信息可供您根据需要查询。

-- A lookup view that returns the top 3 payment methods of orders

CREATE VIEW vw_OrdersTopThreePaymentMethods AS
SELECT TOP 3
ROW_NUMBER() OVER(ORDER BY a.OrderCount DESC) AS Row,
PAYMENT_TYPE,
OrderCount
FROM (
SELECT PAYMENT_TYPE , COUNT(*) as 'OrderCount'
FROM Orders
GROUP BY PAYMENT_TYPE
) a
ORDER BY a.OrderCount desc

-- 3 views that then get the orders for the top three methods based on output of vw_OrdersTopThreePaymentMethods

CREATE VIEW vw_OrdersPrimaryPayment AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE IN (
SELECT PAYMENT_TYPE
FROM vw_OrdersTopThreePaymentMethods
WHERE Row = 1
)

CREATE VIEW vw_OrdersSecondaryPayment AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE IN (
SELECT PAYMENT_TYPE
FROM vw_OrdersTopThreePaymentMethods
WHERE Row = 2
)

CREATE VIEW vw_OrdersTertiaryPayment AS
SELECT *
FROM Orders
WHERE PAYMENT_TYPE IN (
SELECT PAYMENT_TYPE
FROM vw_OrdersTopThreePaymentMethods
WHERE Row = 3
)

关于sql - 根据最常见的订单计算付款类型并为客户分配标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18310851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com