【问题标题】:Couldn't come up with a code to answer this query .无法提供代码来回答此查询。
【发布时间】:2018-06-06 19:51:32
【问题描述】:

SQL> 从显示的_on 中选择 *;

    ID NAME

     2 History of Art
     4 History of Art
     1 Berserk Charity
     5 Berserk Charity

SQL> 从 Art_Object 中选择 *;

    ID YEAR                      TITLE                     DES                       A_NAME

     1 1890                      Old Man                   An old man in the dark    van Gogh
     2 1894                      Cat                       White cat in black canvas van Gogh
     3 1853                      Monalisa                  Smiling woman             Leonardo
     4 1888                      The meeting               Two men talking           Picaso
     5 2017                      The crimson stone         Group of characters       Omar

SQL>

他们问我的查询是(显示每个艺术家现在正在展出的艺术品数量。)正在展出意味着它们在“displayed_on”表中。

【问题讨论】:

  • 按(A_NAME)从 Art_Object 组中选择计数(ID);
  • 我相信您将能够自己弄清楚如何在查询中选择多个字段。提示:谷歌

标签: mysql sql sql-server database join


【解决方案1】:

JOIN这两张表,group by和count:

SELECT
  o1.A_Name,
  COUNT(COALESCE(o2.ID, 0)) AS TotalNOfObjects
FROM Art_Object as o1
LEFT JOIN displayed_on AS o2 ON o1.ID = o2.ID
GROUP BY o1.A_Name;

Results

|   A_Name | TotalNOfObjects |
|----------|-----------------|
| Leonardo |               1 |
|     Omar |               1 |
|   Picaso |               1 |
| van Gogh |               2 |

【讨论】:

  • 如果我需要显示每个类别的艺术品数量怎么办? ,比如绘画+雕塑+其他有多少艺术品,并在一张桌子上显示数量? @Win抄送
【解决方案2】:

答案是:

select count(ID), A_NAME 
from Art_Object 
where ID in (select ID from displayed_on) group by (A_NAME);

【讨论】:

  • 完全不需要子查询
  • 问题清楚地表明“正在展出意味着它们在“displayed_on”表中。”
  • @Omar.K 立即尝试
  • 试过你的,并添加了艺术家姓名:select A_name,count(id) from Art_Object where id in (select id from displayed_on) group by (a_name);
  • 谢谢@Arvindsinc2 和 Baao
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2016-02-04
  • 2021-05-03
  • 2011-02-28
相关资源
最近更新 更多