1

これは非常に簡単ですが、3時間検索しても機能しません。

シナリオは、私は 2 つのビジネスの個々のコストを持つデータベースを持っており、各ビジネスのコストを合計して画面に表示したいと考えています。これで、これは十分に単純で、2 つの SELECT で簡単に実行できることがわかりました。しかし、私はこれを1つのクエリで行いたいです!

DB

|cost|business|
|100 |   1    |
|200 |   2    |
|200 |   1    |
|300 |   2    |

上の表から、b1 = 300 および b2 = 500 であることがわかります。しかし、私のクエリはどれも機能しません!

UNION と CASE を試しましたが、よくわかりません。私のクエリ:

初挑戦:

$buscost = mysql_query("SELECT FORMAT(sum(`cost`),2) as `b1` FROM `outgoing` WHERE `business`=1 
UNION 
SELECT FORMAT(sum(`cost`),2) as `b2` FROM `outgoing` WHERE `business`=2")
or die(mysql_error());
    $buscost = mysql_fetch_array($busowe);

2回目の試行:

$buscost = mysql_query("SELECT 
CASE WHEN `business` = 1 THEN FORMAT(sum(`cost`),2) END AS `b1` ,
CASE WHEN `business` = 2 THEN FORMAT(sum(`cost`),2) END AS `b2`  
FROM `outgoing` WHERE `active`='yes' ");
$buscost = mysql_fetch_array($buscost);

*コストは float(11,2) として設定されます。

ここで同様の質問を見つけましたが、答えはどれも役に立ちませんでした。

ああ、もし iprint_rの場合、最初は b1 の合計のみをフェッチし、b2 は存在しません! そして、私が取得する2番目の配列は、最初のケースの結果セットであり、ケース2の「b2」は空ですが、存在します!! テーブルを確認しましたが、両方のビジネスのテスト データがそこにあります。

アドバイスや解決策を教えてください。

active編集:言及するのを忘れたすべての結果も where ='yes'でフィルタリングする必要があります

4

4 に答える 4

1

グループ化する必要があります:

SELECT business, FORMAT(sum(`cost`),2) AS cost
FROM outgoing
WHERE active = 'yes'
GROUP BY business

フォーマットが必要な場合:

business | cost
b1       | 300
b2       | 500

また

SELECT
(
   SELECT FORMAT(sum(`cost`),2) as `b1`
   FROM `outgoing`
   WHERE `business`=1 AND active = 'yes'
   GROUP BY business
) AS b1,
(
   SELECT FORMAT(sum(`cost`),2) as `b1`
   FROM `outgoing`
   WHERE `business`=2 AND active = 'yes'
   GROUP BY business
) AS b2

フォーマットが必要な場合

b1 | b2
300| 500
于 2012-05-22T19:08:58.370 に答える
0
SELECT  business, SUM(cost)
FROM    mytable
GROUP BY
        business
于 2012-05-22T19:09:00.143 に答える
0

試す

SELECT business, SUM(cost) AS totalCost FROM myTable GROUP BY business
于 2012-05-22T19:09:35.730 に答える
0

あなたはこれを試すことができます:

     select

 @num1:=(select sum(actor_id) from actor where actor_id%2=0)as number_1, 

@num2:=(select sum(actor_id) from actor where actor_id%2!=0)as number_2,

@num1+@num2 as TOTAL;

またはアクティブが必要な場合。

     select

 @num1:=(select sum(actor_id) from actor where actor_id%2=0 and  active='yes')as number_1, 

@num2:=(select sum(actor_id) from actor where actor_id%2!=0 and  active='yes')as number_2,

@num1+@num2 as TOTAL;
于 2012-05-22T19:22:37.327 に答える