首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL COUNT()多列

MySQL COUNT()多列
EN

Stack Overflow用户
提问于 2010-04-13 04:29:43
回答 3查看 7.8K关注 0票数 4

我正在尝试从我的数据库中的所有视频中获取最受欢迎的标签(忽略空白标签)。我还需要每个标签的'flv‘。如果每个视频都有一个标签,我就可以让它像我想要的那样工作:

代码语言:javascript
复制
SELECT tag_1, flv, COUNT(tag_1) AS tagcount 
  FROM videos 
 WHERE NOT tag_1='' 
 GROUP BY tag_1 
 ORDER BY tagcount DESC LIMIT 0, 10

然而,在我的数据库中,每个视频都有三个标签-- tag_1,tag_2和tag_3。有没有办法从多个列中读取最受欢迎的标签?

记录结构为:

代码语言:javascript
复制
+-----------------+--------------+------+-----+---------+----------------+ 
| Field           | Type         | Null | Key | Default | Extra          | 
+-----------------+--------------+------+-----+---------+----------------+ 
| id              | int(11)      | NO   | PRI | NULL    | auto_increment | 
| flv             | varchar(150) | YES  |     | NULL    |                | 
| tag_1           | varchar(75)  | YES  |     | NULL    |                | 
| tag_2           | varchar(75)  | YES  |     | NULL    |                | 
| tag_3           | varchar(75)  | YES  |     | NULL    |                | 
+-----------------+--------------+------+-----+---------+----------------+ 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-13 04:37:12

您需要取消透视数据:

代码语言:javascript
复制
SELECT tag, COUNT(*)
FROM (
    SELECT tag_1 AS tag
    UNION ALL
    SELECT tag_2 AS tag
    UNION ALL
    SELECT tag_3 AS tag
) AS X (tag)
GROUP BY tag
ORDER BY COUNT(*) DESC

我不确定特定标签的flv是如何确定的,因为每个id可以有一个flv,最多可以有3个标签,似乎任何标签都可以有许多不同的flv。

票数 4
EN

Stack Overflow用户

发布于 2010-04-13 04:36:54

代码语言:javascript
复制
select tag, flv, count(*) as tag_count
from (
  select tag_1 as tag, flv from videos
  UNION
  select tag_2 as tag, flv from videos
  UNION
  select tag_3 as tag, flv from videos
) AS X

我认为这可以做到这一点,尽管如果任何记录中的两个标记具有相同的值,则会进行重复计数。

更新:添加为X。

票数 6
EN

Stack Overflow用户

发布于 2010-04-13 04:39:18

这不完全是对你问题的回答,但我相信这是你问题的最佳解决方案。

你有可能改变你的模式吗?如果是这样的话,我认为最好通过将标签拉出到一个单独的表中来标准化它。在这种情况下,您可能会得到2个或3个表,这取决于标签可以是任意字符串还是来自集合/列表。在这种设置下,你会有

代码语言:javascript
复制
Videos (VideoId, Flv)
Tags (TagId, TagName)
VideoTags(TagId, VideoId)

这样就很容易找到最受欢迎的标签了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2625212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档