[英]SQL multiple CASE WHEN with same Count function
我有學生的記錄,並且需要按年齡分組。 我有這種情況:
我想出了這個查詢
SELECT Count(id) as GROUP_SIZE,
CASE WHEN COUNT(id) = 1 THEN name ELSE 'SOME STRING' END as name,
CASE WHEN COUNT(id) = 1 THEN sex ELSE (
CASE WHEN COUNT(CASE WHEN sex = 'MALE' THEN 1 END) = 0 THEN 'FEMALE'
WHEN COUNT(CASE WHEN sex = 'FEMALE' THEN 1 END) = 0 THEN 'MALE'
ELSE 'MIX'
END
) END as sex
FROM students GROUP BY age
該查詢輸出了我想要的場景,但是我多次調用Count(id)。 調用多個Count會影響性能嗎? 或者,如果Count(id)執行一次,那么在成功調用Count(id)時是否有固定的時間? 我嘗試了CASE WHEN GROUP_SIZE
但無法正常工作。 請告知我該如何改善。 謝謝。
我不確定在count(COLUMN)
如何優化MySQL,但是,如果使用count(1)
,則將獲得(至少等於)最佳性能。
我希望它可以重用該值。 使用GROUP BY
,它必須將所有行收集到組中。 容納組的數據結構可能在一個元素中具有組的大小,因此它不需要進行任何實際計數,而是在創建組的過程中完成的。
對於性能可能並不重要,但是請看一下它的感覺:
SELECT age, -- (I think you forgot this)
GROUP_SIZE,
IF (GROUP_SIZE = 1, a_name, 'SOME STRING) AS name,
IF (min_sex = max_sex, max_sex, 'MIX') AS sex
FROM
( SELECT COUNT(*) AS GROUP_SIZE,
MAX(name) AS a_name,
MAX(sex) AS max_sex,
MIN(sex) AS min_sex,
FROM students
GROUP BY age
) z
ORDER BY age; -- (you probably wanted this)
COUNT(*)
是正常模式。 COUNT(x)
檢查x
是否為NULL
,並且不對其進行計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.