一千萬個為什麽

搜索

將第二個查詢所需的第一個查詢的結果重寫為一個mySQL查詢

我有一個類似這樣的mySQL查詢:

SELECT c1, c2 FROM a WHERE a.c3 = 123

我有第二個查詢,我需要執行這樣的每個c2值:

SELECT COUNT(*) AS `Counter` FROM a WHERE a.c2 = [each value of a.c2]

目前,我以編程方式遍歷第一個查詢的每個結果並執行第二個查詢。所以,發生的情況是主查詢使用特定的c3值來生成結果集。然後,第二個查詢使用該結果集並為c2的每個返回值執行COUNT,而對c3的值沒有任何限制。

是否可以重寫第一個查詢,以便它還返回 Counter 的聚合結果?換句話說,我想結束一個包含 c1,c2,Counter 的結果集。

我試圖寫一個子查詢,但這不起作用:

SELECT c1, c2,
(SELECT COUNT(*) AS `Counter` FROM a)
FROM a WHERE a.c3 = 123

(我不知道如何使WHERE子句使用從“主”查詢中檢索到的值。)

我正在使用一個使用mySQL 4.1的舊應用程序。

編輯顯示數據和所需的結果:

假設表 a 如下所示:

| c1  |  c2 |
|+++++++++++|
| 222 | 101 |
| 223 | 101 |
| 224 | 101 |
| 222 | 102 |
| 223 | 102 |

給定c2的指定值,我找到c1的所有匹配值。所以,如果 c2 = 101

| c1  |
|+++++|
| 222 |
| 223 |
| 224 |

現在,對於這三個值中的每一個,我都希望 Count 該值出現在整個表 a 中的次數:

| c1  | count |
|+++++++++++++|
| 222 | 2     |
| 223 | 2     |
| 224 | 1     |

最佳答案

如果你仍然堅持......試試這個......內部查詢為你正在查找的一個ID獲得不同的“c1”值(即:101)。這是一個不同的列表,現在重新連接到原始的完整表格,但僅限於找到的那些“c1”值。然後根據DESCENDING計數將所有找到的和訂單分組,以將最高位置放到列表的頂部。

SELECT 
      a.c1,
      COUNT(*) as NumCount
   from 
      ( select distinct a.c1
           from a where a.c2 = 101 ) GetThese
         JOIN a
            ON GetThese.c1 = a.c1
   group by
      a.c1
   order by 
      COUNT(*) DESC,
      a.c1

轉載註明原文: 將第二個查詢所需的第一個查詢的結果重寫為一個mySQL查詢