4

顧客ごとに、id、name、total_orders、total_value を返したい

顧客:

╔════╦═════════════╗
║ ID ║    NAME     ║
╠════╬═════════════╣
║  1 ║ John Smith  ║
║  2 ║ Jim Jimmers ║
╚════╩═════════════╝

注文:

╔═══════╦══════════╦═══════╗
║  ID   ║ CUSTOMER ║ VALUE ║
╠═══════╬══════════╬═══════╣
║ 34656 ║        1 ║    20 ║
║ 37345 ║        2 ║    25 ║
║ 38220 ║        1 ║    15 ║
║ 39496 ║        1 ║    38 ║
║ 41752 ║        1 ║     9 ║
║ 43734 ║        2 ║    20 ║
╚═══════╩══════════╩═══════╝

次のような結果を選択するにはどうすればよいですか。

╔════╦═════════════╦═════════════╦═════════════╗
║ ID ║    NAME     ║ TOTALORDERS ║ TOTAL_VALUE ║
╠════╬═════════════╬═════════════╬═════════════╣
║  1 ║ John Smith  ║           4 ║          82 ║
║  2 ║ Jim Jimmers ║           2 ║          45 ║
╚════╩═════════════╩═════════════╩═════════════╝
4

3 に答える 3

9
SELECT  a.ID,
        a.Name,
        COUNT(b.Customer) totalOrders,
        SUM(b.value) total_value
FROM    Customers a
        LEFT JOIN Orders b
            ON a.ID = b.Customer
GROUP   BY a.ID,
        a.Name

また

SELECT  a.ID,
        a.Name,
        COUNT(b.Customer) totalOrders,
        COALESCE(SUM(b.value), 0) total_value
FROM    Customers a
        LEFT JOIN Orders b
            ON a.ID = b.Customer
GROUP   BY a.ID,
        a.Name

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

結果、

╔════╦═════════════╦═════════════╦═════════════╗
║ ID ║    NAME     ║ TOTALORDERS ║ TOTAL_VALUE ║
╠════╬═════════════╬═════════════╬═════════════╣
║  1 ║ John Smith  ║           4 ║          82 ║
║  2 ║ Jim Jimmers ║           2 ║          45 ║
╚════╩═════════════╩═════════════╩═════════════╝
于 2013-03-01T17:38:22.030 に答える
0

内部結合を使用してから、ユーザー ID をグループ化して合計します。

SQL 結合は、等値点によってテーブルをマージするために使用されます。このhttp://dev.mysql.com/doc/refman/5.0/en/join.htmlを参照してください。

申し訳ありませんが、現在mysqlサーバーを持っていません。buは次のようなものです:

select id, name, sum(value) from (select customers.id as id, customers.name as name, orders.value as value from customers.id = orders.customer の顧客の内部結合注文) ID によるグループ化

ほとんど確実ではありませんが、どこかに近いです。

于 2013-03-01T17:46:45.177 に答える
0

このクエリは、あなたの軽蔑された出力を与えるはずです:

SELECT c.id, c.name, count(*) AS total_orders, sum(o.value) AS total_value
FROM Customers AS c
     LEFT JOIN Orders AS o ON c.id = o.customer
GROUP BY c.id
于 2013-03-01T17:39:20.277 に答える