繁体   English   中英

从表中进行选择count(col),max(col),column_name_data

[英]doing a select count(col), max(col), column_name_data from table

我如何select count(artc_id) as cval, max(srt_id) as maxval, artc_title from table where artc_pub = 1

这样我就可以得到如下结果:

       cval | maxval | artc_title | artc_pub
    -----------------------------------------
       4         4     Title 1         1 
                       Title 2         1
                       Title 3         1
                       Title 4         1

我桌子的一部分在下面

artc_id | srt_id | artc_title | artc_pub
-----------------------------------------
   1         1     Title 1         1 
   2         2     Title 2         1
   3         3     Title 3         1
   4         4     Title 4         1
   1         5     Title 1         2
   2         6     Title 2         2

我尝试select count(artc_id) as cval, max(srt_id) as maxval, artc_title from table where artc_pub = 1但这仅给我第一个标题所在的行。 我猜这里肯定不止是一个普通的旧选择。

下面的所有答案都给我这样的结果:

cval;maxval;artc_title
1   ;     1; Title 1
1   ;     2; Title 2
1   ;     3; Title 3
1   ;     4; Title 4
1   ;     5; Title 5

不喜欢我在问题中提到的方式。

我认为最好有2个查询,一个用于汇总,一个用于标题:

SELECT COUNT(*) AS cval, 
       MAX(srt_id) AS maxval
FROM table 
WHERE artc_pub = 1 ;

SELECT artc_title 
FROM table 
WHERE artc_pub = 1 ;

您还可以使用GROUP_CONCAT()函数将标题合并为一行:

SELECT COUNT(*) AS cval, 
       MAX(srt_id) AS maxval,
       GROUP_CONCAT(artc_title ORDER BY srt_id SEPARATOR ', ') 
           AS artc_title  
FROM table 
WHERE artc_pub = 1 ;

您也可以将这两个与联接结合在一起,但是会返回很多重复的数据:

SELECT ag . cval, 
       ag . maxval, 
       t  . artc_title 
FROM 
    ( SELECT COUNT(*) AS cval, 
             MAX(srt_id) AS maxval
      FROM table 
      WHERE artc_pub = 1 
    ) AS ag
  CROSS JOIN
    table AS t 
WHERE t.artc_pub = 1 ;

并且,如果MySQL曾经获得过窗口函数(乐观主义者读:什么时候有),上面的代码将写成:

SELECT COUNT(*) OVER ()    AS cval, 
       MAX(srt_id) OVER () AS maxval, 
       artc_title 
FROM table 
WHERE artc_pub = 1 ;

您应该可以在此处使用GROUP BY将结果按“文章标题”分组:

SELECT
    COUNT(artc_id) AS cval,
    MAX(srt_id) AS maxval,
    artc_title
FROM
    table
WHERE
    artc_pub = 1
GROUP BY
    artc_title
ORDER BY
    artc_title;

GROUP BY artc_title像这样:

select 
  count(artc_id) as cval, 
  max(srt_id) as maxval, 
  artc_title 
from table 
where artc_pub = 1
GROUP BY artc_title

您错过了分组期限

 SELECT count(artc_id) AS cval, max(srt_id) AS maxval, artc_title 
       FROM table
       WHERE artc_pub = 1
       GROUP BY artc_title

你尝试过>>

select count(artc_id) as cval, max(srt_id) as maxval, artc_title from table where artc_pub = 1 Group By artc_title

我希望这会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM