[英]how do i compare two rows and store the similarities of the two rows in another column
[英]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
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 要求返回具有snumber
的number
。 然后,我使用CASE
進行檢查,最后使用HAVING
將它們從檢查中過濾掉。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=40cb88da028a42dc147dc4224154ab05
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.