2016-08-09 33 views
1

你好,我以前問過同樣的問題,但我想要另一種方式。我們可以使用定位和最大值函數來解決問題。但我的老師告訴我,做這樣的將兩個表結合起來生成以下輸出的mysql

  1. 我的代碼是這樣的「0」時,則「1」其他「0」

     select u.id, u.name, 
        case f.finger when '0' then '1' else '0' end as '0', 
        case f.finger when '1' then '1' else '0' end as '1', 
        case f.finger when '2' then '1' else '0' end as '2', 
        case f.finger when '3' then '1' else '0' end as '3', 
        case f.finger when '4' then '1' else '0' end as '4', 
        case f.finger when '5' then '1' else '0' end as '5' 
    
        from users u left join user_fingerprints f 
        on u.id= f.user_id 
    

    上面會的代碼產生了8行。

  2. 然後我需要的行結合起來,使具有相同id的行相結合,產生這種

  3. 從結果再使用情況的功能。當值是1時,那麼y。當值爲零時,那麼n。

能有人給我無需使用max函數的答案嗎?謝謝
表,並導致 enter image description here

+0

我們不應該輔導孩子做功課。總的來說,你應該做你的功課不是我們http://meta.stackexchange.com/questions/18242/what-is-the-policy-here-on-homework – RiggsFolly

+0

你的問題很混亂。 首先,爲什麼你有這麼多的情況。如果在f.finger爲0 - 5時設置爲1,爲什麼不使用範圍?其次,看一下GROUP BY函數。 – AliIshaq

+0

如果使用'sum'會怎麼樣? – Blank

回答

0

您還可以使用SUM()做到這一點,另一個CASE EXPRESSION

SELECT t.id,t.name, 
     CASE WHEN t.`0` > 0 THEN 'Y' ELSE 'N' as `0` 
     CASE WHEN t.`1` > 0 THEN 'Y' ELSE 'N' as `1` 
     .... 
FROM (
    SELECT u.id,u.name, 
      SUM(CASE WHEN f.finger = '0' then '1' else '0' end) as `0`, 
      SUM(CASE WHEN f.finger = '1' then '1' else '0' end) as `1`, 
      .... 
    from users u left join user_fingerprints f 
    on u.id= f.user_id 
    GROUP BY u.id,u.name) t 
相關問題