這可能嗎?我有下表:
| Col1 | Col2 | col3 |
|---|---|---|
| 代碼1 | 我們 | 9 |
| 代碼1 | 0 | 5 |
| 代碼2 | 我們 | 4 |
| 代碼2 | 0 | 11 |
| 代碼3 | 0 | 11 |
我正在嘗試通過 col1 和 col2 獲得更高的 col3 值過濾,我現在的嘗試是:
SELECT MAX(col3), col2, col1, count(col1) FROM `mytable` WHERE (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0')) GROUP BY col1;
我的結果:
| Col1 | Col2 | col3 | 計數(col1) |
|---|---|---|---|
| 代碼1 | 我們 | 9 | 2 |
| 代碼2 | 0 | 11 | 2 |
但是我需要的是,如果兩個代碼的 col2 的值等于“US”,則從這些代碼中回傳較高的 col3 值并忽略帶有“0”的值
| Col1 | Col2 | col3 | 計數(col1) |
|---|---|---|---|
| 代碼1 | 我們 | 9 | 2 |
或者,如果其中一個代碼只有一行 col2 等于 '0',則在 code1 = 'US' 和 code2 = '0' 之間進行比較
| Col1 | Col2 | col3 |
|---|---|---|
| 代碼1 | 我們 | 9 |
| 代碼1 | 0 | 5 |
| 代碼2 | 0 | 11 |
| 代碼3 | 0 | 11 |
給出結果:
| Col1 | Col2 | col3 | 計數(col1) |
|---|---|---|---|
| 代碼2 | 0 | 11 | 2 |
是否可以通過 mysql 查詢來實作這一點?還是我應該使用 php?
先感謝您。
uj5u.com熱心網友回復:
您有非常具體的 where 子句,因此您需要在子選擇中重復它們,就像在主選擇中一樣
隨著您的需求變得越來越復雜,您必須增加子選擇的數量以滿足您的要求,ORDER BY 確定選擇的行。
Followimg 為您提供結果,當您添加越來越多的障礙物時,您也必須在代碼中執行此操作
CREATE TABLE tab1 ( `Col1` VARCHAR(5), `Col2` VARCHAR(2), `col3` INTEGER ); INSERT INTO tab1 (`Col1`, `Col2`, `col3`) VALUES ('code1', 'US', '9'), ('code1', '0', '5'), ('code2', 'US', '4'), ('code2', '0', '11'), ('code3', '0', '11');
SELECT * FROM tab1 WHERE col3 = (SELECT MAX(col3) FROM tab1 WHERE (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0'))) AND (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0')) ORDER BY col1,col2 DESC LIMIT 1Col1 | Col2 | col3 :---- | :--- | ---: 代碼2 | 0 | 11
SELECT col1,col2,col3 FROM (SELECT `Col1`, `Col2`, `col3`, ROW_NUMBER() OVER(ORDER BY col2 DESC,col3 DESC) rn2 FROM( SELECT * ,ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col3 DESC) rn FROM tab1) t1 WHERE rn = 1) t2 WHERE rn2 = 1col1 | col2 | col3 :---- | :--- | ---: 代碼1 | 美國 | 9
CREATE TABLE tab2 ( `Col1` VARCHAR(5), `Col2` VARCHAR(2), `col3` INTEGER ); INSERT INTO tab2 (`Col1`, `Col2`, `col3`) VALUES ('code1', '0', '5'), ('code2', 'US', '4'), ('code2', '0', '11'), ('code3', '0', '11');
SELECT col1,col2,col3 FROM (SELECT `Col1`, `Col2`, `col3`, ROW_NUMBER() OVER(ORDER BY col2 DESC,col3 DESC) rn2 FROM( SELECT * ,ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col3 DESC) rn FROM tab2) t1 WHERE rn = 1) t2 WHERE rn2 = 1col1 | col2 | col3 :---- | :--- | ---: 代碼2 | 0 | 11
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467572.html
上一篇:如何在資料庫遷移中使用外鍵遷移。(錯誤號:150“外鍵約束格式不正確”)?
下一篇:Laravel查詢過濾器
