mysql结合两个表来产生以下输出

时间:2016-08-09 07:56:25

标签: mysql mysql-workbench

你好我之前曾问过同样的问题,但我想要另一种方式。我们可以使用locate和max函数来解决问题。但我的老师告诉我这样做

  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。

  4. 有人可以在不使用max功能的情况下给我答案吗?谢谢你  表和结果 enter image description here

1 个答案:

答案 0 :(得分: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