Mysql

SELECT SUM 並刪除相似的行

  • May 3, 2018
SELECT 
SUM(coins.available_supply * hist_all.price) AS market_cap_usd_all 
FROM coins
   LEFT JOIN hist_all ON coins.id = hist_all.coins_id
   WHERE hist_all.price != 0
AND (hist_all.second_coin = 'USD' or hist_all.second_coin = 'USDT');

我嘗試獲取 sum market_cap_usd_all,但在我的表中是帶有USDand的行USDT

在此處輸入圖像描述

我的查詢應該是這樣的:

如果存在行second_coin = USD,則不要使用“USDT”獲取同一行,但如果不存在行,second_coin = USD請檢查是否存在行second_coin = USDT並獲取他。所以表格應該是這樣的:

在此處輸入圖像描述

我不知道如何寫查詢WHERE IF我試過這個:

... WHERE IF (hist_all.second_coin = 'USD', hist_all.second_coin = 'USD', hist_all.second_coin = 'USDT')

但它仍然匯總了來自 USD 和 USDT 的所有行。

您需要一個連接或相關子查詢(使用 `EXISTS),以便比較行:

SELECT 
   SUM(c.available_supply * h.price) AS market_cap_usd_all 
FROM coins AS c
   JOIN hist_all AS h
   ON c.id = h.coins_id
WHERE h.price <> 0
 AND ( h.second_coin = 'USD' 
    OR 
       h.second_coin = 'USDT'
       AND NOT EXISTS
           ( SELECT 1
             FROM hist_all AS hi
             WHERE hi.first_coin = h.first_coin
               AND hi.second_coin = 'USD'
           )
     ) ;

引用自:https://dba.stackexchange.com/questions/205721