感谢您花时间阅读并可能回答我的问题。
我有一个排序问题,我告诉你:
我的SQL查询是:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN
我从中获得的数据是这样的:
map_paths_reduced = map_paths[:10] # Choosing only first 10 paths for simplicity
G = nx.DiGraph()
G.add_nodes_from(range(len(edge_labels)+1))
black_edges = [edge for edge in G.edges()]
pos = nx.random_layout(G)
G.add_edges_from(map_paths_reduced)
nx.draw_networkx_nodes(G, pos, cmap=plt.get_cmap('jet'), node_size=500)
nx.draw_networkx_labels(G, pos, font_size=1)
nx.draw_networkx_edges(G, pos, edgelist=black_edges, arrows=True)
nx.draw_networkx(G, pos, arrows=True)
plt.show()
我想这样:
SELECT p.advisor_create, COUNT(p.id) AS Nb, IF(p.cancel_advisor IS
NULL, "no", "yes") AS refund
FROM payment p
WHERE p.type = 'CESSATION'
AND p.date BETWEEN '2017-01-01 00:00:00' AND '2017-11-31 23:59:59'
GROUP BY p.advisor_create, refund
ORDER BY p.advisor_create, Nb DESC
按相同"顾问"的MAX(NB)排序并将顾问的两行分组在一起。
再次感谢您的帮助。
解决方案:感谢@ gordon-linoff为此
+-------+---+------+
|advisor| NB|refund|
+-------+---+------+
| 170432| 50| no|
| 170432| 4| yes|
| 175222| 30| no|
| 175222| 3| yes|
| 182985|304| no|
| 182985| 19| yes|
| 362912|360| no|
| 362912| 13| yes|
+-------+---+------+
答案 0 :(得分:2)
您可以在order by
中使用子查询。这允许你这样做:
SELECT p.advisor_create, COUNT(p.id) AS Nb,
IF(p.cancel_advisor IS NULL, 'no', 'yes') AS refund
FROM payment p
WHERE p.type = 'CESSATION' AND
p.date >= '2017-01-01' AND
p.date < '2017-12-01'
GROUP BY p.advisor_create, refund
ORDER BY (SELECT COUNT(*)
FROM payment p2
WHERE p2.advisor_create = p.advisor_create AND
p2.type = 'CESSATION' AND
p2.date >= '2017-01-01' AND
p2.date < '2017-12-01' AND
p2.cancel_advisor IS NULL
),
p.advisor_create, Nb DESC;
这假设您要按“否”值排序。如果要按总计排序,只需从子查询中删除该条件。
另请注意,我简化了日期比较。没有理由去做秒 - 实际上,between
不建议用于日期/时间比较,因为时间组件会产生混淆。