数据库设计问题 – SQL_MySQL
要求:a 表:`id`, `name` ; 作为词表,存放不同的词;b 表:`id`, `attr` ; 作为属性表,存放各种属性;其中,一个词可以有不同的多个属性;而每个词的属性的个数也不一定相同;c 表:`id`, `aid`, `bid` ; 作为关系表,存放每个词的对应关系;写出 SQL 语句,来得到每个词拥有属性总数的逆向(DESC)排序:
各种表的信息如下:
mysql> DESC `a`; DESC `b`; DESC `c`;+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || name | varchar(255) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+2 rows in set (0.00 sec)+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || attr | varchar(255) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+2 rows in set (0.01 sec)+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || aid | int(8) | NO | | NULL | || bid | int(8) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+3 rows in set (0.00 sec)
我们预先放入测试的数据,如下:
mysql> SELECT * FROM `a`; SELECT * FROM `b`; SELECT * FROM `c`;+----+------+| id | name |+----+------+| 1 | a || 2 | b || 3 | c || 4 | d || 5 | e |+----+------+5 rows in set (0.00 sec)+----+------+| id | attr |+----+------+| 1 | 111 || 2 | 112 || 3 | 113 || 4 | 123 || 5 | 221 || 6 | 231 || 7 | 252 || 8 | 278 || 9 | 292 || 10 | 256 || 11 | 578 || 12 | 653 || 13 | 521 || 14 | 502 |+----+------+14 rows in set (0.00 sec)+----+-----+-----+| id | aid | bid |+----+-----+-----+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 1 | 4 || 4 | 1 | 7 || 5 | 2 | 8 || 6 | 2 | 11 || 7 | 3 | 3 || 8 | 3 | 5 || 9 | 3 | 6 || 10 | 4 | 9 || 11 | 4 | 10 || 12 | 5 | 12 || 13 | 5 | 13 || 14 | 5 | 14 |+----+-----+-----+14 rows in set (0.00 sec)
首先执行下列语句:
mysql> SELECT COUNT(`bid`) AS `attrcounts` FROM `c` GROUP BY `aid` ORDER BY `attrcounts` DESC;+------------+| attrcounts |+------------+| 4 || 3 || 3 || 2 || 2 |+------------+5 rows in set (0.00 sec)
进而,我们再连表:
mysql> SELECT a.name, COUNT(c.bid) AS `attrcounts` FROM `c` LEFT JOIN `a` ON a.id = c.aid GROUP BY c.aid ORDER BY `attrcounts` DESC;+------+------------+| name | attrcounts |+------+------------+| a | 4 || c | 3 || e | 3 || b | 2 || d | 2 |+------+------------+5 rows in set (0.00 sec)
于是,我们得到了结果;
-------
补充一些基础知识:
如何修改已有表的列:http://www.w3school.com.cn/sql/sql_alter.asp
GROUP BY 相关知识:http://www.w3school.com.cn/sql/sql_groupby.asp

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

利用MongoDB技术开发中遇到的数据库设计问题的解决方案探究摘要:随着大数据和云计算的快速发展,数据库设计在软件开发中显得尤为重要。本文将讨论开发过程中常遇到的数据库设计问题,并通过具体代码示例来介绍MongoDB的解决方案。引言:在软件开发过程中,数据库设计是一个关键的环节。传统的关系型数据库在处理大规模数据时存在一些性能和可扩展性的问题。而MongoD

随着互联网的普及和应用场景的不断增加,数据库设计成为了极其重要的一个问题。而在数据库设计中,冗余字段是一个很重要的问题。冗余字段是指在设计数据库时,出现了重复或不必要的字段。虽然冗余字段可以在一定程度上提高查询效率和速度,但同时也会浪费存储空间和加大维护难度,甚至会影响数据的一致性和安全性。因此,在PHP编程中,应该遵循一定的最佳实践,来解决冗余字段带来的问

Golang是一种由Google开发的编程语言,其使用简单、性能优越和跨平台特性使得它在现代Web应用程序开发中越来越受到欢迎。在Web应用程序开发中,数据库设计是非常重要的一部分。在这篇文章中,我们将介绍如何使用Golang开发Web应用程序时进行数据库设计实践。选择数据库首先,我们需要选择一个合适的数据库。Golang支持多种数据库,例如MySQL、Po

如何在PHP中实现商品多规格SKU的数据库设计在电商平台中,商品规格是一个非常重要的概念。商品规格可以理解为商品的不同属性和特征,例如尺寸、颜色、重量等。在实际应用中,针对不同的规格,我们往往需要为每一种组合设置不同的价格、库存和图片等信息。这就需要我们设计一个合适的数据库结构来存储和管理商品的规格及其相关信息。本文将介绍如何在PHP中实现商品多规格SKU的

MySQL数据库设计:点餐系统菜品表引言:在餐饮行业中,点餐系统的设计和实现是至关重要的。其中一个核心的数据表就是菜品表,这篇文章将详细介绍如何设计和创建一个有效的菜品表,以支持点餐系统的功能。一、需求分析在设计菜品表之前,我们需要明确系统的需求和功能。在点餐系统中,菜品表需要存储每一道菜品的相关信息,包括菜名、价格、分类、描述等等。此外,还需要考虑到菜品

使用MySQLMVCC优化数据库设计,提高应用性能摘要:在当今互联网应用中,数据库的性能对系统的稳定运行和响应时间至关重要。MySQL作为最常用的关系数据库管理系统之一,在设计数据库时,通过使用多版本并发控制(MVCC)来提高并发性能和数据一致性。本文将介绍MVCC的基本原理和MySQL中的实现,并给出一些优化数据库设计的实例。MVCC基本原理多版本并发

PHP和MySQL是一对强大的组合,具有广泛的应用。在互联网行业,PHP和MySQL已经成为了技术栈的标配,大量的网站、Web应用、后台管理系统等应用都采用了这对组合。本文将探讨PHP和MySQL数据库的设计与应用,并介绍一些最佳实践。一、PHP和MySQL数据库的优势PHP是一种开源的、跨平台的、服务端的Web编程语言,拥有广泛的应用场景。MySQL是一种

MySQL复合主键在数据库设计中的应用详解MySQL复合主键是指由多个字段组成的主键,通过组合这些字段的值来唯一标识一条记录。在数据库设计中,复合主键的应用非常广泛,特别是在需要唯一标识某个实体的情况下。本文将详细介绍MySQL复合主键的概念、设计原则以及具体的代码示例。一、MySQL复合主键的概念在MySQL中,主键是用来唯一标识表中的每一行数据的字段
