我有一個包含年齡,性別,sid和目標名稱的表。我想按年齡/性別對此進行分組,然後顯示每個年齡/性別的前2個最常用目標名稱的值。如何在MySQL聲明/查詢中動態創建CASE語句
這裏的示例表:
我已成功使用查詢得到一個輸出:
SELECT age, gender,
SUM(CASE WHEN sid = 'Frank.net Life Cover' THEN 1 ELSE 0 END) AS 'Frank.net Life Cover',
SUM(CASE WHEN sid = 'Frank.net Salary Protection' THEN 1 ELSE 0 END) AS 'Frank.net Salary Protection',
SUM(CASE WHEN sid = 'Frank.net Hospital Cash Back' THEN 1 ELSE 0 END) AS 'Frank.net Hospital Cash Back'
FROM (SELECT uid, sid, goalname, gender, age
FROM sampletable
WHERE age >=16
AND age < 100
GROUP BY age, gender);
這裏的輸出:
我期望的輸出有點像這但關於這一點的事情是它不是動態的。新的目標名稱被添加,這將不適用,因爲我手動將目標名稱放在CASE語句中。另外,我只需要顯示每個年齡/性別的最常用的2個目標名稱。
注意:如果您無法顯示排名前2並且只顯示每個目標名稱的總數,則可以。我想我可以通過比較PHP中每個目標名稱的總數來得到前兩名。我只需要有一個動態的SQL查詢。
謝謝!
您發佈的SQL數據作爲畫面每一次,一隻小貓死了。使用[小提琴](http://sqlfiddle.com) –
對不起。我不知道這件事。我試圖在SQLFiddle上覆制它,但是我有一個錯誤:http://sqlfiddle.com/#!2/9cc8fa – maikelsabido
如果sqlfiddle有問題(它發生),那麼只需粘貼爲問題文本(意味着它很容易複製和實驗)。 – Kickstart