ฉันพยายามทำสิ่งต่อไปนี้ใน MySQL (ดูpseudo
รหัส)
SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC
มีวิธีการทำเช่นนี้โดยไม่ใช้ (SELECT ... ) ในส่วนคำสั่ง WHERE เพราะดูเหมือนว่าจะเป็นการสิ้นเปลืองทรัพยากร
ฉันพยายามทำสิ่งต่อไปนี้ใน MySQL (ดูpseudo
รหัส)
SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC
มีวิธีการทำเช่นนี้โดยไม่ใช้ (SELECT ... ) ในส่วนคำสั่ง WHERE เพราะดูเหมือนว่าจะเป็นการสิ้นเปลืองทรัพยากร
คำตอบ:
ลองสิ่งนี้
select gid
from `gd`
group by gid
having count(*) > 10
order by lastupdated desc
AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
HAVING variations > 0 OR (stock = 1 OR quantity > 0)
ฉันไม่แน่ใจเกี่ยวกับสิ่งที่คุณพยายามจะทำ ... อาจจะเป็นอะไรบางอย่าง
SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
num
ข้อผิดพลาดในการแยกวิเคราะห์สำหรับ +1 ต่อไปสำหรับไวยากรณ์ที่สะอาด (อาจเป็นการตั้งค่าของฉันหรือ ms ...
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;
แก้ไข (ถ้าคุณต้องการแค่ gids):
SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
ลอง
SELECT DISTINCT gid
FROM `gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
เพียงแค่รุ่นวิชาการโดยไม่ต้องมีข้อ:
select *
from (
select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;
ไม่มีฟังก์ชั่นรวม (เช่น COUNT, MAX, ฯลฯ ) ใน A WHERE clause ดังนั้นเราจึงใช้ส่วนคำสั่ง HAVING แทน ดังนั้นข้อความค้นหาทั้งหมดจะคล้ายกับสิ่งนี้:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
- ค้นหาสถานีอากาศที่ไม่มีบันทึกครึ่งชั่วโมง
SELECT stationid
FROM weather_data
WHERE `Timestamp` LIKE '2011-11-15 %' AND
stationid IN (SELECT `ID` FROM `weather_stations`)
GROUP BY stationid
HAVING COUNT(*) != 48;
- รูปแบบของ yapiskan กับที่ .. เลือก ..
ฉันคิดว่าคุณไม่สามารถเพิ่มด้วยcount()
where
ตอนนี้ดูว่าทำไม ....
where
ไม่ได้เช่นเดียวกับhaving
, having
หมายถึงคุณกำลังทำงานหรือการจัดการกับกลุ่มและการทำงานที่เหมือนกันของการนับก็ยังต้องรับมือกับทั้งกลุ่ม
ตอนนี้นับว่ามันทำงานเป็นกลุ่มได้อย่างไร
สร้างตารางและป้อนรหัสบางส่วนแล้วใช้:
select count(*) from table_name
คุณจะพบค่าทั้งหมดหมายความว่ามีการระบุกลุ่ม! ดังนั้นwhere
จะเพิ่มด้วยcount()
;
COUNT (*) สามารถใช้ได้กับ HAVING เท่านั้นและจะต้องใช้หลังจากคำสั่ง GROUP BY โปรดค้นหาตัวอย่างต่อไปนี้:
SELECT COUNT(*), M_Director.PID FROM Movie
INNER JOIN M_Director ON Movie.MID = M_Director.MID
GROUP BY M_Director.PID
HAVING COUNT(*) > 10
ORDER BY COUNT(*) ASC