根据列值仅为MySQL选择一次记录
我有一个存储交易信息的表。每笔交易都有一个唯一的(自动递增的)id列,一个包含客户id号的列,一个名为根据列值仅为MySQL选择一次记录,sql,mysql,Sql,Mysql,我有一个存储交易信息的表。每笔交易都有一个唯一的(自动递增的)id列,一个包含客户id号的列,一个名为bill\u paid的列,该列指示客户是否已使用“是”或“否”为交易付款,以及一些其他列,其中包含与我的问题无关的其他信息 我想从交易表中选择所有未支付账单的客户ID,但如果客户有多个未支付账单的交易,我不想多次选择。通过这种方式,我可以为客户生成一张账单,其中包含他们所欠的所有交易,而不是为每笔交易生成一张单独的账单。我如何构建一个能为我做到这一点的查询?您可以尝试使用操作符,例如按客户分组
bill\u paid
的列,该列指示客户是否已使用“是”或“否”为交易付款,以及一些其他列,其中包含与我的问题无关的其他信息
我想从交易表中选择所有未支付账单的客户ID,但如果客户有多个未支付账单的交易,我不想多次选择。通过这种方式,我可以为客户生成一张账单,其中包含他们所欠的所有交易,而不是为每笔交易生成一张单独的账单。我如何构建一个能为我做到这一点的查询?您可以尝试使用操作符,例如按客户分组。对于每个
账单支付
等于“否”的客户,只返回一个客户id
:
SELECT customer, SUM(toPay) FROM .. GROUP BY customer
SELECT
t.customer_id
FROM
transactions t
WHERE
t.bill_paid = 'no'
GROUP BY
t.customer_id
编辑:分组依据
总结您的结果集。注意:所选的每一列都必须“按分组”或以某种方式聚合。如图所示,您可以使用
SUM
获取欠款总额,例如:
SELECT
t.customer_id
, SUM(t.amount) AS TOTAL_OWED
FROM
transactions AS t
WHERE
t.bill_paid = 'no'
GROUP BY
t.customer_id
t
只是一个别名。因此,您现在不必到处键入事务,只需键入
t
。这里不需要别名,因为您只查询一个表,但我发现它们对于更大的查询非常有用。您可以选择键入作为
,以更清楚地表明您使用的是别名。这如何排除bill_paid=yes列?感谢您的回答,但正如@Konerak指出的,这并没有考虑到bill_paid
的状态。既然我不是MySQL忍者,请您为我详细解释一下。具体来说,t.
代表什么?还有,transactions t
在做什么?谢谢,我现在把它们都放在一起了,看起来它会起作用。让我问你一个问题,是否不赞成使用PHP来计算我的总数,而不是使用MySQLSUM()
函数?我想坚持“最佳实践”,但我认为使用PHP进行计算会更容易,因为我生成的账单是逐项列出的。简单的汇总,如上面的示例,在MySQL中处理起来更简单(而且可能更快)。感谢您的回答,group by
是我想要的,但是@Adam Bernier解释得更透彻了。