(for解决方案A)我只是需要有人来帮助确认/否认我在ORDER BY子句中使用聚合函数的方式是否被允许,考虑到我在SELECT语句中没有提到这个特定的聚合函数。
(for解决方案B)对于进一步的上下文,我试图找出具有最高交易计数的卡程序的名称。我最初的版本也附上了,主要的例子是我简化尝试的结果。我知道效率,清晰度和简洁性明显缺乏。任何关于提示的替代方法的反馈,或者关于如何思考的建议,这样我就可以避免做下面的事情,直接进入最佳查询,也绝对/高度赞赏!!
给定3个表->事务:id、user_transaction_time、card_id、amount
card_programs:id,display_name卡:id,card_program_id
问:哪个卡程序的交易最多?
解决方案:
解决方案A:我的最终简化版本:
SELECT TOP 1 card_programs.display_name AS program_name
FROM transactions T
LEFT JOIN cards ON cards.id = T.card_id
LEFT JOIN card_programs ON card_programs.id = cards.card_program_id
GROUP BY card_programs.display_name
ORDER BY COUNT(T.id) DESC
解决方案B:我的第一次尝试:
WITH transaction_count_tbl AS (
SELECT card_programs.display_name AS program_name,
card_id,
card_programs.card_program_id,
count(id) AS transaction_count
FROM transactions T
LEFT JOIN cards
ON cards.id = T.card_id
LEFT JOIN card_programs
ON card_programs.id = card.card_program_id
GROUP BY 1,2,3
ORDER BY count(id) DESC
)
SELECT TOP 1 program_name
FROM transaction_count_tbl
ORDER BY transaction_count DESC
1条答案
按热度按时间xzabzqsa1#
您可以按从1开始的列号排序,如下所示: