0

makale_payments テーブルが null の場合、クエリは null を返します。payment_total0.00 のように SUM( ) に存在しない場合、レコードを取得するクエリをどのように設定する必要がありますか?

SELECT article_name,user_real_name,user_name,SUM(`article_payment`) as holding,paid
FROM makale_articles AS t1
JOIN makale_users ON (t1.article_name=makale_users.user_id) 
JOIN (SELECT user_id,SUM(`payment_total`) as paid FROM makale_payments GROUP BY user_id) AS t2 ON (t1.article_name=t2.user_id)
GROUP BY t2.user_id
4

4 に答える 4

1

これは何のためのものIFNULLです:

IFNULL(SUM(...), 0.0)
于 2012-04-28T23:56:22.570 に答える
1

article_paymentおそらくNULLいくつかの行です。これを試して:

SELECT 
    article_name,
    user_real_name,
    user_name,
    SUM(COALESCE(`article_payment`, 0)) as holding,
    paid
FROM article_articles AS t1
JOIN article_users ON (t1.article_name=article_users.user_id) 
JOIN (
    SELECT user_id, SUM(COALESCE(`payment_total`, 0)) as paid 
    FROM article_payments 
    GROUP BY user_id
) AS t2 ON (t1.article_name=t2.user_id)
GROUP BY t2.user_id
于 2012-04-29T00:00:46.763 に答える
0

MySQL は、特に ISNULL をテストしたとしても、null を返す行の集計値を返しません。ISNULL は、リレーションが null を返すかどうかではなく、列が null かどうかを確認するためだけのものです。ただし、この制限を回避する (非常にあいまいではありますが) 方法を見つけました。基本的な前提は、2 つの SQL ステートメントすべてを結合し、結合された 2 つのクエリを選択するサブクエリとして使用することです。

結合されたクエリは次の形式になります。

   select column1, column2, SUM(column3) as payment from tablea, tableb where....
   union all
   select column1, column2, 0.00 as payment from tablea --notice no join, and a specified value and alias for aggregate column

上記のクエリを使用すると、リレーションが null でない行ごとに 2 つの行が取得され、null の場合は 1 つの行が取得されます。その行を合計してグループ化すると、必要な値になるはずです。次に、上記をテーブルとして使用して集計列を選択し、合計するクエリを作成します。

   select column1, column2, SUM(payment) from

   (select column1, column2, SUM(column3) as payment from tablea, tableb where....
   union all
   select column1, column2, 0.00 as payment from tablea) as b
   group by column1, column2

おそらくクエリの構文が間違っていると思います。申し訳ありませんが、テストする MySQL がここにはありません。

于 2012-04-29T04:42:34.697 に答える
0

単純な WHERE は問題ないと思います

WHERE SUM(`article_payment`) > 0
于 2012-04-29T00:00:25.953 に答える