gpt4 book ai didi

mysql - 如何使用 group by 进行 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 05:04:18 24 4
gpt4 key购买 nike

下面是我的表结构

user_id    quote_id    bill_type(2=>proforma,1=>invoice)
474 676 2
674 676 2
474 676 1
445 680 2
422 120 2
411 240 2
411 240 2
410 240 2
410 240 1

基本上在我的门户中,我们有买方和卖方 (user_id),他们都可以使用特定的 quote_id 进行买卖,如上表所示。一对特定的买家和卖家可以有多个 quote_id。 (你可以考虑亚马逊的情况,特定买家可以从特定卖家那里购买多种产品。这里的产品将是 quote_id)

这里 bill_type 是指发票 (1) 或形式 (2)。发票将仅发送给用户一次,对于特定的 quote_id 可以多次发送形式发票。现在的问题是我想返回数据,以便返回尚未为特定 quote_id 生成发票的用户。

如果我们考虑上述情况,那么返回的数据应该是:

user_id    quote_id    bill_type(2=>proforma,1=>invoice)
674 676 2
445 680 2
422 120 2
411 240 2

这是尚未为特定 quote_id 生成账单的用户。

到目前为止,我设法进行的查询是:

select *, GROUP_CONCAT(bill_type) as bt,GROUP_CONCAT(user_id)
from quote
GROUP BY quote_id

现在我要删除在程序帮助下生成发票的用户。但这不是正确的方法我需要查询来实现这一点。

最佳答案

您可以使用 WHERE NOT EXISTS 子句来执行此操作,以检查是否没有针对特定 user_id/quote_id 组合发送的匹配发票:

SELECT DISTINCT q1.user_id, q1.quote_id, q1.bill_type
FROM quote q1
WHERE NOT EXISTS (SELECT *
FROM quote q2
WHERE q2.user_id = q1.user_id AND q2.quote_id = q2.quote_id AND q2.bill_type = 1)

输出:

user_id  quote_id  bill_type
674 676 2
445 680 2
422 120 2
411 240 2

SELECT 上的 DISTINCT 可确保您在发送多个形式发票(例如组合 411/240)的情况下不会获得多行。

要处理 quote_id 为 NULL 并且您不希望输出中出现这些行的情况,请将查询更改为:

SELECT DISTINCT q1.user_id, q1.quote_id, q1.bill_type
FROM quote q1
WHERE NOT EXISTS (SELECT *
FROM quote q2
WHERE q2.user_id = q1.user_id AND q2.quote_id = q2.quote_id AND q2.bill_type = 1)
AND q1.quote_id IS NOT NULL

SQLFiddle

关于mysql - 如何使用 group by 进行 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51653481/

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