簡體   English   中英

如果檢查的第一列中的兩行相同,我如何使用另一列?

[英]How do I use another column if two rows in the first column checked are the same?

我有一個看起來像這樣的表:

石頭

ID 數字 號碼 重量 qt
1 一個 11.5 13
2 c 4.0 8
3 一個 a1 1.0 2
4 d 0.5 1
5 b 2.0 4
6 一個 a2 5.0 1
7 F 3.0 6
8 一個 a3 5.0 10

我如何 select 全部來自石頭,如果列snumber列中有行,則只給出snumber行的結果[否則使用number ]?

我還試圖合並到我以前的 [工作] 代碼中,該代碼選擇表中wt >= 2.5 的所有行,然后將所有這些行計為totalrows

SELECT inv.*, COUNT(*) OVER() AS totalrows FROM stones inv WHERE wt >= 2.5
  • 因此,從上面的示例中,我想顯示以下行ca2fa3 ,其中totalrows = 4:
ID 數字 號碼 重量 qt 總行
2 c 4.0 8 4
6 一個 a2 5.0 1 4
7 F 3.0 6 4
8 一個 a3 5.0 10 4

嘗試失敗

我試過這些,但我的 PHP 出現錯誤,所以我假設 SQL 有問題:

第一

SELECT stones.*,
 CASE 
  WHEN x.totalrows > 1 
   THEN stones.snumber
   ELSE stones.number
  END AS numberORsnumber
  FROM stones 
  JOIN (
   SELECT number, COUNT(*) AS totalrows FROM stones
    GROUP BY number
  ) x ON x.number = stones.number
WHERE x.totalrows = 1 OR stones.snumber <> '' AND wt >= 2.5

第二

SELECT inv.*, COUNT(*) OVER() AS totalrows FROM stones inv 
 CASE 
  WHEN totalrows > 1
   THEN inv.snumber
  ELSE inv.number
 END AS number
WHERE wt >= 2.5

錯誤在END AS number OR snumber 刪除OR snumber后,不會有任何錯誤,但也不會有任何結果; 根據您提供的示例數據。 嘗試將WHERE x.totalrows = 1 AND wt >= 2.5更改為WHERE wt >= 2.5只是因為您已經在執行CASE表達式:

CASE 
        WHEN x.totalrows > 1
            THEN stones.snumber
            ELSE stones.number
        END AS number

因此,添加WHERE x.totalrows = 1不會從CASE產生任何東西。

演示小提琴

更新:

好吧,經過長時間的評論討論,我想我明白了:

SELECT inv.ID, 
       CASE WHEN inv.snumber <> "" 
            THEN inv.snumber ELSE inv.number 
            END AS numberORSnumber, 
       inv.wt,
       inv.qt,
       COUNT(*) OVER() AS totalrows,
       CASE WHEN inv.number=v.number 
            AND inv.snumber="" THEN 0 ELSE 1 END AS Checking
FROM stones inv 
CROSS JOIN 
(SELECT number FROM stones WHERE snumber <> "" group by number) v
WHERE wt >= 2.5
HAVING Checking <> 0
ORDER BY ID ASC;

我最終添加了一個帶有子查詢的CROSS JOIN ,該子查詢根據 OP 要求返回具有snumbernumber 然后,我使用CASE進行檢查,最后使用HAVING將它們從檢查中過濾掉。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=40cb88da028a42dc147dc4224154ab05

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM