代码之家  ›  专栏  ›  技术社区  ›  ubiquibacon

根据列值仅为MySQL选择一次记录

  •  1
  • ubiquibacon  · 技术社区  · 14 年前

    我有一个存储交易信息的表。每个事务都有一个唯一的(自动递增的)ID列,一个带有客户ID号的列,一个名为 bill_paid 它表示交易是否由客户以“是”或“否”进行支付,以及包含与我的问题无关的其他一些信息的列。

    我想从未支付账单的交易表中选择所有客户ID,但如果客户有多个未支付账单的交易,我不想选择它们多次。通过这种方式,我可以为客户生成一张账单,其中包含他们所欠的所有交易,而不是每个交易单独的账单。我将如何构建一个这样做的查询?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Community Mike Kinghan    7 年前

    只返回一个 customer_id 对于每个客户 bill_paid 等于“否”:

    SELECT 
        t.customer_id
    FROM 
        transactions t
    WHERE 
        t.bill_paid = 'no'
    GROUP BY
        t.customer_id
    

    编辑:
    GROUP BY 总结您的结果集。
    警告:所选的每一列都必须“分组依据”或以某种方式聚合。如图所示 nikic 你可以使用 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 . 这里不需要别名,因为您只查询一个表,但是我发现对于较大的查询来说,别名非常有用。您可以选择键入 AS 为了更清楚地说明您使用的是别名。

        2
  •  0
  •   srparish    14 年前

    你可以试试 Group By 操作员,如按客户分组。

        3
  •  0
  •   NikiC    14 年前
    SELECT customer, SUM(toPay) FROM .. GROUP BY customer