how to group by and count using MySQL

二次信任 提交于 2019-12-20 07:23:47

问题


I have data which looks like this:

ID  post_author post_title  guid
3309    21  Should somebody not yet on SQL 2008 wait for SQL 2008 R2, since it's near release?  http://sql.stackexchange.com/questions/379/should-somebody-not-yet-on-sql-2008-wait-for-sql-2008-r2-since-its-near-release
1695    429 How do we politely decline well meaning advice from the Grandmother?    http://moms4mom.stackexchange.com/questions/1208/how-do-we-politely-decline-well-meaning-advice-from-the-grandmother
556 173 Books on how to be a great dad  http://moms4mom.stackexchange.com/questions/1042/books-on-how-to-be-a-great-dad
160 30  Building an ice hockey net cam  http://photo.stackexchange.com/questions/8/building-an-ice-hockey-net-cam
159 30  Generic commercial photo release form   http://photo.stackexchange.com/questions/4/generic-commercial-photo-release-form

I need to create a query that groups the data on part of the GUID field (the root URL) and counts the POST_AUTHOR for each.

The result I am looking for would be like this:

Site    Count of Authors
http://sql.stackexchange.com    1
http://moms4mom.stackexchange.com   2
http://photo.stackexchange.com  2

I would be grateful if someone help me construct the sql.


回答1:


SELECT COUNT(POST_AUTHOR) AS AUTHOR_COUNT, GUID FROM TABLE_NAME GROUP BY GUID



回答2:


It may be possible to construct such a query but will be not optimized.

You should add a column to your table which will have an ID of the site. Then add a new table which will have a preparsed data for the site: domain, path, resource, whether http or https, etc

This way you can be more flexible in searches and will be much faster, since I assume you have few inserts and large number of reads.




回答3:


Write a SQL FUNCTION - call it for instance, guid_extract(guid), which extracts the pertinent info, then you can add it to a column in your select::

SELECT stuff, otherstuff, guid_extract(guid) as site
  ...
  GROUP BY site;



回答4:


The problem is how to extract the root part of the URL. If we can be sure that every URL will have at least 3 slashes, this will work, using substring_index

select substring_index(guid,'/',3) as site, count(id) as authors from table
group by substring_index(guid,'/',3) 

Of course, if you add an extra column with the site only at insert time, everything will be faster, cleaner and safer (you won't have to complexify the query to handle guids with only two slashes)



来源:https://stackoverflow.com/questions/1589834/how-to-group-by-and-count-using-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!