簡體   English   中英

MySQL查詢:合並兩個查詢

[英]Mysql query: combine two queries

以下是我正在使用的表格的過度簡化版本:

fruits
+-------+---------+ 
| id    | type    | 
+-------+---------+ 
| 1     | apple   | 
| 2     | orange  | 
| 3     | banana  | 
| 4     | apple   | 
| 5     | apple   | 
| 6     | apple   | 
| 7     | orange  | 
| 8     | apple   | 
| 9     | apple   | 
| 10    | banana  | 
+-------+---------+

以下是兩個有趣的查詢:

SELECT * FROM fruits WHERE type='apple' LIMIT 2;

SELECT COUNT(*) AS total FROM fruits WHERE type='apple'; // output 6

我想結合這兩個查詢,以便結果看起來像這樣:

+-------+---------+---------+  
| id    | type    | total   |
+-------+---------+---------+  
| 1     | apple   | 6       |
| 4     | apple   | 6       | 
+-------+---------+---------+

輸出必須限制為2個記錄,但它還應包含apple類型的記錄總數。

如何用1個查詢完成?

SELECT *, (SELECT COUNT(*) AS total FROM fruits WHERE type='apple') AS Total 
FROM fruits WHERE type='apple' LIMIT 2;

根據MySQL的解釋方式,它可能會緩存內部查詢,這樣就不必為每個記錄重新評估它。

另一種方法是使用嵌套查詢和聯接(例如,如果您需要多個水果類型,這將很有用):

SELECT fruits.*, counts.total
FROM fruits 
  INNER JOIN (SELECT type, COUNT(*) AS total FROM fruits GROUP BY type) counts ON (fruits.type = counts.type)
WHERE fruits.type='apple'
LIMIT 2;

您應該SQL_CALC_FOUND_ROWS使用SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM fruits WHERE type='apple' LIMIT 2;

將返回您蘋果的ID,並記住如果沒有LIMIT子句,它將返回多少

SELECT FOUND_ROWS();

將返回沒有限制聲明的情況下將發現的蘋果數量。

暫無
暫無

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

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