我有这样一张桌子:
Column | Type | Modifiers
---------+------+-----------
country | text |
food_id | int |
eaten | date |
Run Code Online (Sandbox Code Playgroud)
对于每个国家,我想获得最常吃的食物.我能想到的最好的(我使用的是postgres)是:
CREATE TEMP TABLE counts AS
SELECT country, food_id, count(*) as count FROM munch GROUP BY country, food_id;
CREATE TEMP TABLE max_counts AS
SELECT country, max(count) as max_count FROM counts GROUP BY country;
SELECT country, max(food_id) FROM counts
WHERE (country, count) IN (SELECT * from max_counts) GROUP BY country;
Run Code Online (Sandbox Code Playgroud)
在最后一个陈述中,需要GROUP BY和max()来打破关系,其中两种不同的食物具有相同的数量.
对于概念上简单的事情来说,这似乎是很多工作.有没有更直接的方式来做到这一点?
如何获取MySQL中每个标记最常出现的类别?理想情况下,我想模拟一个计算列模式的聚合函数.
SELECT
t.tag
, s.category
FROM tags t
LEFT JOIN stuff s
USING (id)
ORDER BY tag;
+------------------+----------+
| tag | category |
+------------------+----------+
| automotive | 8 |
| ba | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 10 |
| bamboo | 8 |
| bamboo | 9 |
| bamboo | 8 …Run Code Online (Sandbox Code Playgroud) 我需要能够找到客户下达的订单总数,还可以在一个查询中找到最佳产品.例如,在以下结构中,
CREATE TABLE #Cust (CustId INT, CustName VARCHAR(50))
CREATE TABLE #Product (ProductId INT, ProductName VARCHAR(10) )
CREATE TABLE #Orders (CustId INT, ProductId INT, OrderTaken BIT)
INSERT #Cust
( CustId, CustName )
VALUES ( 1, 'Paul' ),
( 2, 'F' ),
( 3, 'Francis' )
INSERT #Product
( ProductId, ProductName )
VALUES ( 1, 'Table' ),
( 2, 'Chair' )
INSERT #Orders
( CustId, ProductId, OrderTaken )
VALUES ( 1, 1, 1 ),
( 1, 1, 1 ),
( 1, 2, …Run Code Online (Sandbox Code Playgroud)